{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "import qutip"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### Setting up basic matrices:\n",
    "The Pauli matrices are the four 2x2 matrices, I, X, Y, Z.\n",
    "For this example, we have a 4x4 Hamiltonian that is decomposed into IZ, ZI, XX, YY, and ZZ terms (this notation is not matrix multiplication--it is a Kronecker product, which takes two 2x2 matrices and gives a 4x4 matrix)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "I = np.eye(2)\n",
    "X = np.array([[0., 1.],\n",
    "              [1., 0.]])\n",
    "Y = np.array([[0., -1j],\n",
    "              [1j, 0.]])\n",
    "Z = np.array([[1., 0.],\n",
    "              [0., -1.]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.  0.  0.  0.]\n",
      " [ 0. -1.  0. -0.]\n",
      " [ 0.  0.  1.  0.]\n",
      " [ 0. -0.  0. -1.]]\n"
     ]
    }
   ],
   "source": [
    "IZ = np.kron(I, Z)\n",
    "print(IZ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.  0.  0.  0.]\n",
      " [ 0.  1.  0.  0.]\n",
      " [ 0.  0. -1. -0.]\n",
      " [ 0.  0. -0. -1.]]\n"
     ]
    }
   ],
   "source": [
    "ZI = np.kron(Z, I)\n",
    "print(ZI)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0. 0. 0. 1.]\n",
      " [0. 0. 1. 0.]\n",
      " [0. 1. 0. 0.]\n",
      " [1. 0. 0. 0.]]\n"
     ]
    }
   ],
   "source": [
    "XX = np.kron(X, X)\n",
    "print(XX)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.+0.j  0.-0.j  0.-0.j -1.+0.j]\n",
      " [ 0.+0.j  0.+0.j  1.-0.j  0.-0.j]\n",
      " [ 0.+0.j  1.-0.j  0.+0.j  0.-0.j]\n",
      " [-1.+0.j  0.+0.j  0.+0.j  0.+0.j]]\n"
     ]
    }
   ],
   "source": [
    "YY = np.kron(Y, Y)\n",
    "print(YY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.  0.  0.  0.]\n",
      " [ 0. -1.  0. -0.]\n",
      " [ 0.  0. -1. -0.]\n",
      " [ 0. -0. -0.  1.]]\n"
     ]
    }
   ],
   "source": [
    "ZZ = np.kron(Z, Z)\n",
    "print(ZZ)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "### Hamiltonian\n",
    "We consider the Hamiltonian:\n",
    "$H = IZ + ZI - XX - YY + ZZ$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 3.+0.j  0.+0.j  0.+0.j  0.+0.j]\n",
      " [ 0.+0.j -1.+0.j -2.+0.j  0.+0.j]\n",
      " [ 0.+0.j -2.+0.j -1.+0.j  0.+0.j]\n",
      " [ 0.+0.j  0.+0.j  0.+0.j -1.+0.j]]\n"
     ]
    }
   ],
   "source": [
    "H = IZ + ZI - XX - YY + ZZ\n",
    "print(H)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### Measuring an observable\n",
    "An observable is a matrix that we can measure against a state $\\vec{\\psi}$. The Hamiltonian is an observable. So are the Pauli terms that it is written as a sum of.\n",
    "\n",
    "To measure some observable matrix $M$ with respect to a state $\\vec{\\psi}$, we just compute $\\vec{\\psi}^{\\dagger} M \\vec{\\psi}$. The $\\dagger$ means conjugate transpose = transpose the matrix and then take complex conjugates. In this specific example, all the numbers are real, so it happens to be the same as an ordinary matrix transpose.\n",
    "\n",
    "Here is a helper method that does everything for us:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def measure(M, state):\n",
    "    \"Should only call for Pauli String M.\"\n",
    "    eigenvalues, eigenvectors = np.linalg.eig(M)    \n",
    "    p_plus1, p_minus1 = 0, 0\n",
    "\n",
    "    for i, eigenvalue in enumerate(eigenvalues):\n",
    "        probability = np.absolute(np.asmatrix(state).getH() @ eigenvectors[:,i]) ** 2\n",
    "        if np.isclose(eigenvalue, 1):\n",
    "            p_plus1 += probability\n",
    "        elif np.isclose(eigenvalue, -1):\n",
    "            p_minus1 += probability\n",
    "        else:\n",
    "            assert False, \"M has a non +/- 1 eigenvalue. This should only be called with Pauli String M.\"\n",
    "            \n",
    "    assert np.isclose(p_plus1 + p_minus1, 1), 'total probability, %s, is not 1' % (p_plus1 + p_minus1)\n",
    "\n",
    "    if random.random() <= p_minus1:\n",
    "        return -1\n",
    "    else:\n",
    "        return +1\n",
    "    \n",
    "    \n",
    "def simultaneous_measure(M_list, state):\n",
    "    \"\"\"Should only call M_list comprising pair-wise commuting Pauli Strings.\n",
    "    \n",
    "    Returns a list where the j'th item is the measurement outcome (either +1 or -1)\n",
    "    is for the j'th observable in M_list\"\"\"\n",
    "    qobj_list = [qutip.Qobj(M) for M in M_list]\n",
    "    eigenvalues_list, eigenvectors = qutip.simdiag(qobj_list)  # get simultaneous eigenvectors & corresponding evals\n",
    "    eigenvalues_list = np.round(eigenvalues_list, 9)\n",
    "    eigenvectors = [eigenvector.full() for eigenvector in eigenvectors]\n",
    "    \n",
    "    probabilities = []\n",
    "    for eigenvector in eigenvectors:\n",
    "        probabilities.append((np.absolute(np.asmatrix(state).getH() @ eigenvector) ** 2)[0, 0])\n",
    "    assert np.isclose(sum(probabilities), 1)\n",
    "    \n",
    "    j = np.random.choice(list(range(len(eigenvectors))), p=probabilities)  # so we measured the j'th eigenvector\n",
    "    return [eigenvalues[j] for eigenvalues in eigenvalues_list]\n",
    "            \n",
    "    \n",
    "def expected_value(M, state):\n",
    "    return np.asmatrix(state).getH() @ M @ state  # .getH() does conjugate tranpose"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.316\n",
      "[[-0.3568195+0.j]]\n"
     ]
    }
   ],
   "source": [
    "# Test that measure works, i.e. over many measurements, the average of measure is the same as expected_value\n",
    "state = qutip.rand_ket_haar(2).full()\n",
    "\n",
    "outcomes = [measure(Y, state) for _ in range(1000)]\n",
    "print(sum(outcomes) / len(outcomes))\n",
    "\n",
    "print(expected_value(Y, state))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "For random states, {XX, YY, ZZ} will each average to 0:\n",
      "-0.03\n",
      "-0.006\n",
      "0.06\n",
      "\n",
      "\n",
      "For a specific state that happens to be a simultaneous eigenvector, the outcomes are exactly +/- 1\n",
      "1.0\n",
      "1.0\n",
      "-1.0\n"
     ]
    }
   ],
   "source": [
    "# Test that simultaneous_measure works\n",
    "num_trials = 1000\n",
    "\n",
    "print('For random states, {XX, YY, ZZ} will each average to 0:')\n",
    "outcomes_list = []\n",
    "for _ in range(num_trials):\n",
    "    state = qutip.rand_ket_haar(4).full()\n",
    "    outcomes_list.append(simultaneous_measure([XX, YY, ZZ], state))\n",
    "print(sum([outcomes_list[i][0] for i in range(num_trials)]) / num_trials)\n",
    "print(sum([outcomes_list[i][1] for i in range(num_trials)]) / num_trials)\n",
    "print(sum([outcomes_list[i][2] for i in range(num_trials)]) / num_trials)\n",
    "print('\\n')\n",
    "\n",
    "print('For a specific state that happens to be a simultaneous eigenvector, '\n",
    "      'the outcomes are exactly +/- 1')\n",
    "state = [[0], [0.70710678], [0.70710678], [0]]\n",
    "outcomes_list = []\n",
    "for _ in range(num_trials):\n",
    "    outcomes_list.append(simultaneous_measure([XX, YY, ZZ], state))\n",
    "print(sum([outcomes_list[i][0] for i in range(num_trials)]) / num_trials)\n",
    "print(sum([outcomes_list[i][1] for i in range(num_trials)]) / num_trials)\n",
    "print(sum([outcomes_list[i][2] for i in range(num_trials)]) / num_trials)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### Let's try for $\\vec{\\psi} = [0, 1, 0, 0]^T$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "state = np.array([[0.], [1.], [0.], [0.]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Method 1: measure $H$ directly\n",
    "A quantum computer can't actually measure $H$ directly, but let's just check what the answer should be."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-1.+0.j]]\n"
     ]
    }
   ],
   "source": [
    "print(expected_value(H, state))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Method 2: linearity of expectation\n",
    "A quantum computer can compute the Pauli observables though. So let's use linearity of expectation instead:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-1.]] [[1.]] [[0.]] [[0.+0.j]] [[-1.]]\n",
      "[[-1.+0.j]]\n"
     ]
    }
   ],
   "source": [
    "IZ_expectation = expected_value(IZ, state)\n",
    "ZI_expectation = expected_value(ZI, state)\n",
    "XX_expectation = expected_value(XX, state)\n",
    "YY_expectation = expected_value(YY, state)\n",
    "ZZ_expectation = expected_value(ZZ, state)\n",
    "print(IZ_expectation, ZI_expectation, XX_expectation, YY_expectation, ZZ_expectation)\n",
    "print(IZ_expectation + ZI_expectation - XX_expectation - YY_expectation + ZZ_expectation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Yup, we got -1 both ways!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "### Variances / Covariances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def variance(M, state):\n",
    "    # variances is <M^2> - <M>^2\n",
    "    return expected_value(M @ M, state) - expected_value(M, state) ** 2\n",
    "\n",
    "def covariance(M_1, M_2, state):\n",
    "    return expected_value(M_1 @ M_2, state) - expected_value(M_1, state) * expected_value(M_2, state)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The cells below show that:\n",
    "- Var(H) = 4\n",
    "- Var(IZ) + Var(ZI) + Var(XX) + Var(YY) + Var(ZZ) = 2 -- not equal because we need to account for covariances\n",
    "- the summed covariances do indeed equal 4. Note that the XX and ZZ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[4.+0.j]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(H, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(IZ, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(ZI, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1.]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(XX, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[1.+0.j]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(YY, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0.]])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(ZZ, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.]] 2 2\n",
      "[[1.+0.j]] 2 3\n",
      "[[1.+0.j]] 3 2\n",
      "[[1.+0.j]] 3 3\n",
      "Variance from summed covariances is [[4.+0.j]]\n"
     ]
    }
   ],
   "source": [
    "terms, coefficients = [IZ, ZI, XX, YY, ZZ], [1., 1., -1., -1., 1.]\n",
    "total = np.array([[0.+0.j]])\n",
    "for i in range(5):\n",
    "    for j in range(5):\n",
    "        cov = covariance(terms[i], terms[j], state)\n",
    "        if cov != 0:\n",
    "            print(cov, i, j)\n",
    "            total += (coefficients[i] * coefficients[j] * covariance(terms[i], terms[j], state))\n",
    "print('Variance from summed covariances is %s' % total)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "### Different State, $\\vec{\\psi} = [0.43 - 0.16i, -0.49, 0.44i, -0.39 + 0.46i]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "state = np.array([[0.43 - 0.16j], [-0.49], [0.43j], [-0.39 + 0.46j]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[4.35848816-2.22044605e-16j]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(H, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(matrix([[0.95576944+0.j]]),\n",
       " matrix([[0.989596+0.j]]),\n",
       " matrix([[0.76629724+6.6974204e-18j]]),\n",
       " matrix([[0.76629724+0.j]]),\n",
       " matrix([[0.97693936+0.j]]))"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "variance(IZ, state), variance(ZI, state), variance(-XX, state), variance(-YY, state), variance(ZZ, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.1287768+0.j]]\n",
      "[[-0.06690672+0.j]]\n",
      "[[-0.1937784+0.j]]\n",
      "[[0.08370276-3.3487102e-18j]]\n",
      "[[0.41059608+1.03528297e-18j]]\n",
      "[[-0.41059608+6.9388939e-18j]]\n"
     ]
    }
   ],
   "source": [
    "print(covariance(IZ, ZI, state))\n",
    "print(covariance(IZ, ZZ, state))\n",
    "print(covariance(ZI, ZZ, state))\n",
    "print(covariance(-XX, -YY, state))\n",
    "print(covariance(-XX, ZZ, state))\n",
    "print(covariance(-YY, ZZ, state))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "22.2744964"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Setting 1 (measure all terms separately) would require a number of state preparations equal to:\n",
    "5 * (0.95576944 + 0.989596 + 0.76629724 + 0.76629724 + 0.97693936)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14.6395752"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Setting 2 (measure {XX}, {YY, ZZ}, {IZ, ZI}) would require a number of state preparations equal to:\n",
    "3 * (0.95576944 + 0.989596 + 0.76629724 + 0.76629724 + 0.97693936 + 2*0.08370276 + 2*0.1287768)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.7597168"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Setting 3 (measure {XX, YY, ZZ}, {IZ, ZI}) would require a number of state preparations equal to:\n",
    "2 * (0.95576944 + 0.989596 + 0.76629724 + 0.76629724 + 0.97693936 + 2*0.08370276 + 2*0.41059608 + 2*-0.41059608 + 2*0.1287768)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Programatically finding optimal groupings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}0.0 & 0.0 & 0.0 & -1.0\\\\0.0 & 0.0 & -1.0 & 0.0\\\\0.0 & -1.0 & 0.0 & 0.0\\\\-1.0 & 0.0 & 0.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}"
      ],
      "text/plain": [
       "Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True\n",
       "Qobj data =\n",
       "[[ 0.  0.  0. -1.]\n",
       " [ 0.  0. -1.  0.]\n",
       " [ 0. -1.  0.  0.]\n",
       " [-1.  0.  0.  0.]]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Functions for parsing from strings to matrices\n",
    "import qutip\n",
    "\n",
    "def _to_matrix(pauli_char):\n",
    "    if pauli_char == 'X':\n",
    "        return qutip.sigmax()\n",
    "    elif pauli_char == 'Y':\n",
    "        return qutip.sigmay()\n",
    "    elif pauli_char == 'Z':\n",
    "        return qutip.sigmaz()\n",
    "    return qutip.identity(2)\n",
    "    \n",
    "def pauli_string_to_matrix(pauli_string, sign=1):\n",
    "    if pauli_string[0] == '-':\n",
    "        sign = -1\n",
    "        pauli_string = pauli_string[1:]\n",
    "    matrices = []\n",
    "    for char in pauli_string:\n",
    "        matrices.append(_to_matrix(char))\n",
    "    return sign*qutip.tensor(matrices)\n",
    "\n",
    "pauli_string_to_matrix('-XX')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def variance_grouping(grouping, state):\n",
    "    \"\"\"\n",
    "    Computes the variance of a grouping, via the formula\n",
    "             Var(A+B) = Var(A) + Var(B) + 2*Cov(A,B)\n",
    "    Inputs:\n",
    "       Grouping (as a list, e.g. [-XX, -YY, ZZ])\n",
    "       State (as a np.array, e.g. np.array([[0.], [1.], [0.], [0.]]))\n",
    "    \"\"\"\n",
    "    running_variance = sum([variance(term, state) for term in grouping])\n",
    "    grouping_size = len(grouping)\n",
    "    for i in range(grouping_size):\n",
    "        for j in range(i):\n",
    "            running_variance += 2*covariance(grouping[i], grouping[j], state)\n",
    "    return(np.asscalar(running_variance))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Credit to: https://stackoverflow.com/questions/19368375/set-partitions-in-python\n",
    "def partition(collection):\n",
    "    if len(collection) == 1:\n",
    "        yield [ collection ]\n",
    "        return\n",
    "\n",
    "    first = collection[0]\n",
    "    for smaller in partition(collection[1:]):\n",
    "        # insert `first` in each of the subpartition's subsets\n",
    "        for n, subset in enumerate(smaller):\n",
    "            yield smaller[:n] + [[ first ] + subset]  + smaller[n+1:]\n",
    "        # put `first` in its own subset \n",
    "        yield [ [ first ] ] + smaller\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def grouping_is_pairwise_commuting(grouping_to_test):\n",
    "    \"\"\"\n",
    "    Computes whether all pairs within a grouping commute (in a general sense).\n",
    "    Inputs:\n",
    "        grouping_to_test: a single list of *strings*, e.g. [\"-XX\", \"-YY\", \"ZZ\", \"IZ\", \"ZI\"]\n",
    "    Returns:\n",
    "        True if all pairs commute; False if not all pairs commute\n",
    "    \"\"\"\n",
    "    evaled_grouping_to_test = [pauli_string_to_matrix(term).full() for term in grouping_to_test]\n",
    "    running_sum = 0\n",
    "    for i in range(len(evaled_grouping_to_test)):\n",
    "        for j in range(i+1, len(evaled_grouping_to_test)):\n",
    "            # RHS evaluates to 1 if non-commuting, 0 if commuting\n",
    "            running_sum += not np.array_equal(evaled_grouping_to_test[i] @ evaled_grouping_to_test[j],\n",
    "                               evaled_grouping_to_test[j] @ evaled_grouping_to_test[i])\n",
    "    # sum will be 0 iff all pairs commute\n",
    "    return(running_sum == 0)\n",
    "\n",
    "def is_valid_partition(partition):\n",
    "    \"\"\"\n",
    "    Computes whether all groupings within a partition are pairwise commuting.\n",
    "    Inputs:\n",
    "        partition: a list of lists of strings, e.g. [['-XX', '-YY'], ['ZZ', 'IZ', 'ZI']]\n",
    "    Outputs:\n",
    "        1 if all groupings within the partition are pairwise commuting. Else 0.\n",
    "    \"\"\"\n",
    "    return(sum([grouping_is_pairwise_commuting(grouping) for grouping in partition]) == len(partition))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>expected_state_preps</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>[[-XX], [-YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(10+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>[[-XX, -YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>(12+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>(12+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>(12+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(12+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(16+0j)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           partition  expected_state_preps\n",
       "7       [[-XX], [-YY, ZZ], [IZ, ZI]]                (6+0j)\n",
       "12      [[-YY], [-XX, ZZ], [IZ, ZI]]                (6+0j)\n",
       "4       [[-XX], [-YY], [ZZ, IZ, ZI]]                (6+0j)\n",
       "48    [[-YY], [-XX, ZZ], [IZ], [ZI]]                (8+0j)\n",
       "38    [[-XX], [-YY, ZZ], [IZ], [ZI]]                (8+0j)\n",
       "34    [[-XX], [-YY], [IZ], [ZZ, ZI]]                (8+0j)\n",
       "14    [[-XX], [-YY], [ZZ], [IZ, ZI]]                (8+0j)\n",
       "24    [[-XX], [-YY], [ZZ, IZ], [ZI]]                (8+0j)\n",
       "2         [[-XX, -YY], [ZZ, IZ, ZI]]                (8+0j)\n",
       "5         [[-XX, -YY, ZZ], [IZ, ZI]]                (8+0j)\n",
       "51  [[-XX], [-YY], [ZZ], [IZ], [ZI]]               (10+0j)\n",
       "31      [[-XX, -YY], [IZ], [ZZ, ZI]]               (12+0j)\n",
       "21      [[-XX, -YY], [ZZ, IZ], [ZI]]               (12+0j)\n",
       "11      [[-XX, -YY], [ZZ], [IZ, ZI]]               (12+0j)\n",
       "35      [[-XX, -YY, ZZ], [IZ], [ZI]]               (12+0j)\n",
       "47    [[-XX, -YY], [ZZ], [IZ], [ZI]]               (16+0j)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def calculate_expected_state_preps_valid_partitions(term_set, state):\n",
    "    \"\"\"\n",
    "    Computes the expected number of state preparations given every valid partition of a set of terms.\n",
    "    A valid partition is one in which all groupings are pairwise commuting.\n",
    "    Inputs:\n",
    "        term_set: list of *strings*, e.g. [\"-XX\", \"-YY\", \"ZZ\", \"IZ\", \"ZI\"]\n",
    "        state: as a np.array, e.g. np.array([[0.], [1.], [0.], [0.]]))\n",
    "    \"\"\"\n",
    "    evaled_term_set = [pauli_string_to_matrix(term).full() for term in term_set]\n",
    "    partition_list = []\n",
    "    expected_state_prep_list = []\n",
    "    for pp in partition(list(range(len(term_set)))):\n",
    "        partition_list.append([list(np.array(term_set)[grouping]) for grouping in pp])\n",
    "        expected_state_prep_list.append(sum([variance_grouping(np.array(evaled_term_set)[indices], state)*len(pp) for indices in pp]))\n",
    "    partition_df = pd.DataFrame({'partition': partition_list, 'expected_state_preps': expected_state_prep_list}).sort_values(by=[\"expected_state_preps\"])\n",
    "    # Eliminate invalid partitions that contain groupings that are non-pairwise-computing.\n",
    "    return(partition_df[partition_df['partition'].apply(lambda partition: is_valid_partition(partition))])\n",
    "\n",
    "# Aspuru-Guzik example\n",
    "test_term_set = [\"-XX\", \"-YY\", \"ZZ\", \"IZ\", \"ZI\"]\n",
    "state = np.array([[0], [1], [0], [0]])\n",
    "\n",
    "partition_list = calculate_expected_state_preps_valid_partitions(test_term_set, state)\n",
    "partition_list\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Helper function: print all pairwise covariances across commuting terms\n",
    "def pairwise_covariances_commuting_terms(term_set, state):\n",
    "    covariance_list = []\n",
    "    evaled_term_set = [pauli_string_to_matrix(term).full() for term in term_set]\n",
    "    for i in range(len(evaled_term_set)):\n",
    "        for j in range(i+1, len(evaled_term_set)):\n",
    "            # evaluates to 1 if commuting, 0 if non-commuting\n",
    "            if np.array_equal(evaled_term_set[i] @ evaled_term_set[j],\n",
    "                               evaled_term_set[j] @ evaled_term_set[i]):\n",
    "                covariance_list.append([term_set[i], term_set[j], covariance(evaled_term_set[i], evaled_term_set[j], state).item()])\n",
    "    return(pd.DataFrame(covariance_list, columns=[\"term 1\", \"term 2\", \"covariance\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>term 1</th>\n",
       "      <th>term 2</th>\n",
       "      <th>covariance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-XX</td>\n",
       "      <td>-YY</td>\n",
       "      <td>(1+0j)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-XX</td>\n",
       "      <td>ZZ</td>\n",
       "      <td>0j</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-YY</td>\n",
       "      <td>ZZ</td>\n",
       "      <td>0j</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ZZ</td>\n",
       "      <td>IZ</td>\n",
       "      <td>0j</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ZZ</td>\n",
       "      <td>ZI</td>\n",
       "      <td>0j</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>IZ</td>\n",
       "      <td>ZI</td>\n",
       "      <td>0j</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  term 1 term 2  covariance\n",
       "0    -XX    -YY      (1+0j)\n",
       "1    -XX     ZZ          0j\n",
       "2    -YY     ZZ          0j\n",
       "3     ZZ     IZ          0j\n",
       "4     ZZ     ZI          0j\n",
       "5     IZ     ZI          0j"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pairwise_covariances_commuting_terms(test_term_set, state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "def expected_state_preps_for_list_of_states(test_term_set, state_list):\n",
    "    \"\"\"\n",
    "    Given a *list* of possible states, calculates the number of\n",
    "    expected state preparations for every state in that list,\n",
    "    for every valid partition.\n",
    "    Input:\n",
    "        test_term_set, as a list of strings: e.g. ['-XX', '-YY', 'ZZ', 'IZ', 'ZI']\n",
    "        state_list, as a list of np arrays, e.g. [qutip.basis(4,i).full() for i in range(4)]\n",
    "    Output:\n",
    "        Pandas dataframe with:\n",
    "            - partition\n",
    "            - expected state preps over every state\n",
    "            - mean number of state preps, given a uniform probability of any of the states\n",
    "            - variance of state preps, given a uniform probability of any of the states\n",
    "    \"\"\"\n",
    "    n_states = len(state_list)\n",
    "    base_df = calculate_expected_state_preps_valid_partitions(test_term_set, state_list[0])\n",
    "    for state in state_list[1:]:\n",
    "        # Merge the next calculation in the list, based on index\n",
    "        base_df = pd.merge(base_df,\n",
    "                 calculate_expected_state_preps_valid_partitions(test_term_set, state).iloc[:,1],\n",
    "                 left_index = True, right_index = True)\n",
    "    # rename columns to state0, state1, etc.\n",
    "    base_df.columns.values[1:] = [\"{}{}\".format(a_,b_) for a_, b_ in zip(['state']*n_states, [str(i) for i in range(n_states)])]\n",
    "    base_df['row_mean'] = base_df.iloc[:,1:].mean(axis=1)\n",
    "    base_df['row_var'] = base_df.iloc[:,1:].var(axis=1)\n",
    "    base_df = base_df.sort_values(by=[\"row_mean\"])\n",
    "    # round the real and imaginary parts to two decimal places\n",
    "    base_df.iloc[:,1:] = base_df.iloc[:,1:].apply(lambda x: np.around(x, decimals=2), axis=0)\n",
    "    return(base_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>state0</th>\n",
       "      <th>state1</th>\n",
       "      <th>state2</th>\n",
       "      <th>state3</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>[[-XX, -YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(16+0j)</td>\n",
       "      <td>(16+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>64.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>[[-XX], [-YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(10+0j)</td>\n",
       "      <td>(10+0j)</td>\n",
       "      <td>(10+0j)</td>\n",
       "      <td>(10+0j)</td>\n",
       "      <td>(10+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           partition   state0   state1   state2   state3  \\\n",
       "5         [[-XX, -YY, ZZ], [IZ, ZI]]       0j   (8+0j)   (8+0j)       0j   \n",
       "2         [[-XX, -YY], [ZZ, IZ, ZI]]       0j   (8+0j)   (8+0j)       0j   \n",
       "35      [[-XX, -YY, ZZ], [IZ], [ZI]]       0j  (12+0j)  (12+0j)       0j   \n",
       "31      [[-XX, -YY], [IZ], [ZZ, ZI]]       0j  (12+0j)  (12+0j)       0j   \n",
       "21      [[-XX, -YY], [ZZ, IZ], [ZI]]       0j  (12+0j)  (12+0j)       0j   \n",
       "11      [[-XX, -YY], [ZZ], [IZ, ZI]]       0j  (12+0j)  (12+0j)       0j   \n",
       "4       [[-XX], [-YY], [ZZ, IZ, ZI]]   (6+0j)   (6+0j)   (6+0j)   (6+0j)   \n",
       "12      [[-YY], [-XX, ZZ], [IZ, ZI]]   (6+0j)   (6+0j)   (6+0j)   (6+0j)   \n",
       "7       [[-XX], [-YY, ZZ], [IZ, ZI]]   (6+0j)   (6+0j)   (6+0j)   (6+0j)   \n",
       "47    [[-XX, -YY], [ZZ], [IZ], [ZI]]       0j  (16+0j)  (16+0j)       0j   \n",
       "48    [[-YY], [-XX, ZZ], [IZ], [ZI]]   (8+0j)   (8+0j)   (8+0j)   (8+0j)   \n",
       "38    [[-XX], [-YY, ZZ], [IZ], [ZI]]   (8+0j)   (8+0j)   (8+0j)   (8+0j)   \n",
       "24    [[-XX], [-YY], [ZZ, IZ], [ZI]]   (8+0j)   (8+0j)   (8+0j)   (8+0j)   \n",
       "34    [[-XX], [-YY], [IZ], [ZZ, ZI]]   (8+0j)   (8+0j)   (8+0j)   (8+0j)   \n",
       "14    [[-XX], [-YY], [ZZ], [IZ, ZI]]   (8+0j)   (8+0j)   (8+0j)   (8+0j)   \n",
       "51  [[-XX], [-YY], [ZZ], [IZ], [ZI]]  (10+0j)  (10+0j)  (10+0j)  (10+0j)   \n",
       "\n",
       "    row_mean  row_var  \n",
       "5     (4+0j)     16.0  \n",
       "2     (4+0j)     16.0  \n",
       "35    (6+0j)     36.0  \n",
       "31    (6+0j)     36.0  \n",
       "21    (6+0j)     36.0  \n",
       "11    (6+0j)     36.0  \n",
       "4     (6+0j)      0.0  \n",
       "12    (6+0j)      0.0  \n",
       "7     (6+0j)      0.0  \n",
       "47    (8+0j)     64.0  \n",
       "48    (8+0j)      0.0  \n",
       "38    (8+0j)      0.0  \n",
       "24    (8+0j)      0.0  \n",
       "34    (8+0j)      0.0  \n",
       "14    (8+0j)      0.0  \n",
       "51   (10+0j)      0.0  "
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# basis states\n",
    "basis_states_4 = [qutip.basis(4,i).full() for i in range(4)]\n",
    "basis_states_mean_state_preps = expected_state_preps_for_list_of_states(test_term_set, basis_states_4)\n",
    "basis_states_mean_state_preps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>state0</th>\n",
       "      <th>state1</th>\n",
       "      <th>state2</th>\n",
       "      <th>state3</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(6.98+0j)</td>\n",
       "      <td>(11.04-0j)</td>\n",
       "      <td>(11.31-0j)</td>\n",
       "      <td>(4.79-0j)</td>\n",
       "      <td>(8.53-0j)</td>\n",
       "      <td>7.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>(9.27+0j)</td>\n",
       "      <td>(9.29+0j)</td>\n",
       "      <td>(10.06+0j)</td>\n",
       "      <td>(9.85-0j)</td>\n",
       "      <td>(9.62+0j)</td>\n",
       "      <td>0.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>[[-XX, -YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(8.05+0j)</td>\n",
       "      <td>(14.17-0j)</td>\n",
       "      <td>(17.59-0j)</td>\n",
       "      <td>(7.16-0j)</td>\n",
       "      <td>(11.74-0j)</td>\n",
       "      <td>18.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>[[-XX, -YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>(10.68+0j)</td>\n",
       "      <td>(9.92+0j)</td>\n",
       "      <td>(13.66+0j)</td>\n",
       "      <td>(14.14-0j)</td>\n",
       "      <td>(12.1+0j)</td>\n",
       "      <td>3.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(9.44+0j)</td>\n",
       "      <td>(12.38+0j)</td>\n",
       "      <td>(16.89-0j)</td>\n",
       "      <td>(10.17-0j)</td>\n",
       "      <td>(12.22-0j)</td>\n",
       "      <td>8.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>(14+0j)</td>\n",
       "      <td>(14.38+0j)</td>\n",
       "      <td>(12.08+0j)</td>\n",
       "      <td>(12.39-0j)</td>\n",
       "      <td>(13.21+0j)</td>\n",
       "      <td>0.99</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>[[-XX, -YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>(12.4+0j)</td>\n",
       "      <td>(13.62+0j)</td>\n",
       "      <td>(14.74+0j)</td>\n",
       "      <td>(12.99-0j)</td>\n",
       "      <td>(13.44+0j)</td>\n",
       "      <td>0.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ, ZI]]</td>\n",
       "      <td>(14.5+0j)</td>\n",
       "      <td>(17.6-0j)</td>\n",
       "      <td>(11.73+0j)</td>\n",
       "      <td>(11.73-0j)</td>\n",
       "      <td>(13.89+0j)</td>\n",
       "      <td>5.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ, ZI]]</td>\n",
       "      <td>(13.64+0j)</td>\n",
       "      <td>(13.45+0j)</td>\n",
       "      <td>(14.88+0j)</td>\n",
       "      <td>(15.94-0j)</td>\n",
       "      <td>(14.48+0j)</td>\n",
       "      <td>1.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>[[-YY], [-XX, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(9.37+0j)</td>\n",
       "      <td>(13.32+0j)</td>\n",
       "      <td>(23.34-0j)</td>\n",
       "      <td>(13.54-0j)</td>\n",
       "      <td>(14.89-0j)</td>\n",
       "      <td>26.58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>[[-XX], [-YY], [IZ], [ZZ, ZI]]</td>\n",
       "      <td>(13.88+0j)</td>\n",
       "      <td>(12.58+0j)</td>\n",
       "      <td>(17.93+0j)</td>\n",
       "      <td>(20.4-0j)</td>\n",
       "      <td>(16.2+0j)</td>\n",
       "      <td>9.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>[[-XX, -YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(15.45+0j)</td>\n",
       "      <td>(15.99+0j)</td>\n",
       "      <td>(16.92+0j)</td>\n",
       "      <td>(16.49-0j)</td>\n",
       "      <td>(16.21+0j)</td>\n",
       "      <td>0.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>[[-XX], [-YY, ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(16.11+0j)</td>\n",
       "      <td>(20.28-0j)</td>\n",
       "      <td>(16.46+0j)</td>\n",
       "      <td>(15.61-0j)</td>\n",
       "      <td>(17.12+0j)</td>\n",
       "      <td>3.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ, ZI]]</td>\n",
       "      <td>(18.31+0j)</td>\n",
       "      <td>(18.53+0j)</td>\n",
       "      <td>(15.82+0j)</td>\n",
       "      <td>(18.07-0j)</td>\n",
       "      <td>(17.68+0j)</td>\n",
       "      <td>1.19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>[[-XX], [-YY], [ZZ, IZ], [ZI]]</td>\n",
       "      <td>(16.17+0j)</td>\n",
       "      <td>(17.52+0j)</td>\n",
       "      <td>(19.37+0j)</td>\n",
       "      <td>(18.87-0j)</td>\n",
       "      <td>(17.98+0j)</td>\n",
       "      <td>1.55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>[[-XX], [-YY], [ZZ], [IZ], [ZI]]</td>\n",
       "      <td>(18.87+0j)</td>\n",
       "      <td>(19.18+0j)</td>\n",
       "      <td>(20.8+0j)</td>\n",
       "      <td>(22.55-0j)</td>\n",
       "      <td>(20.35+0j)</td>\n",
       "      <td>2.15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           partition      state0      state1      state2  \\\n",
       "5         [[-XX, -YY, ZZ], [IZ, ZI]]   (6.98+0j)  (11.04-0j)  (11.31-0j)   \n",
       "2         [[-XX, -YY], [ZZ, IZ, ZI]]   (9.27+0j)   (9.29+0j)  (10.06+0j)   \n",
       "35      [[-XX, -YY, ZZ], [IZ], [ZI]]   (8.05+0j)  (14.17-0j)  (17.59-0j)   \n",
       "31      [[-XX, -YY], [IZ], [ZZ, ZI]]  (10.68+0j)   (9.92+0j)  (13.66+0j)   \n",
       "12      [[-YY], [-XX, ZZ], [IZ, ZI]]   (9.44+0j)  (12.38+0j)  (16.89-0j)   \n",
       "11      [[-XX, -YY], [ZZ], [IZ, ZI]]     (14+0j)  (14.38+0j)  (12.08+0j)   \n",
       "21      [[-XX, -YY], [ZZ, IZ], [ZI]]   (12.4+0j)  (13.62+0j)  (14.74+0j)   \n",
       "7       [[-XX], [-YY, ZZ], [IZ, ZI]]   (14.5+0j)   (17.6-0j)  (11.73+0j)   \n",
       "4       [[-XX], [-YY], [ZZ, IZ, ZI]]  (13.64+0j)  (13.45+0j)  (14.88+0j)   \n",
       "48    [[-YY], [-XX, ZZ], [IZ], [ZI]]   (9.37+0j)  (13.32+0j)  (23.34-0j)   \n",
       "34    [[-XX], [-YY], [IZ], [ZZ, ZI]]  (13.88+0j)  (12.58+0j)  (17.93+0j)   \n",
       "47    [[-XX, -YY], [ZZ], [IZ], [ZI]]  (15.45+0j)  (15.99+0j)  (16.92+0j)   \n",
       "38    [[-XX], [-YY, ZZ], [IZ], [ZI]]  (16.11+0j)  (20.28-0j)  (16.46+0j)   \n",
       "14    [[-XX], [-YY], [ZZ], [IZ, ZI]]  (18.31+0j)  (18.53+0j)  (15.82+0j)   \n",
       "24    [[-XX], [-YY], [ZZ, IZ], [ZI]]  (16.17+0j)  (17.52+0j)  (19.37+0j)   \n",
       "51  [[-XX], [-YY], [ZZ], [IZ], [ZI]]  (18.87+0j)  (19.18+0j)   (20.8+0j)   \n",
       "\n",
       "        state3    row_mean  row_var  \n",
       "5    (4.79-0j)   (8.53-0j)     7.60  \n",
       "2    (9.85-0j)   (9.62+0j)     0.12  \n",
       "35   (7.16-0j)  (11.74-0j)    18.64  \n",
       "31  (14.14-0j)   (12.1+0j)     3.34  \n",
       "12  (10.17-0j)  (12.22-0j)     8.44  \n",
       "11  (12.39-0j)  (13.21+0j)     0.99  \n",
       "21  (12.99-0j)  (13.44+0j)     0.76  \n",
       "7   (11.73-0j)  (13.89+0j)     5.87  \n",
       "4   (15.94-0j)  (14.48+0j)     1.01  \n",
       "48  (13.54-0j)  (14.89-0j)    26.58  \n",
       "34   (20.4-0j)   (16.2+0j)     9.76  \n",
       "47  (16.49-0j)  (16.21+0j)     0.30  \n",
       "38  (15.61-0j)  (17.12+0j)     3.43  \n",
       "14  (18.07-0j)  (17.68+0j)     1.19  \n",
       "24  (18.87-0j)  (17.98+0j)     1.55  \n",
       "51  (22.55-0j)  (20.35+0j)     2.15  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Are the ideal partitions the same with random kets?\n",
    "random_state_list = [qutip.rand_ket(4).full() for i in range(4)]\n",
    "random_states_mean_state_preps = expected_state_preps_for_list_of_states(test_term_set, random_state_list)\n",
    "# round the real and imaginary parts to two decimal places\n",
    "random_states_mean_state_preps.iloc[:,1:] = random_states_mean_state_preps.iloc[:,1:].apply(lambda x: np.around(x, decimals=2), axis=0)\n",
    "random_states_mean_state_preps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/numeric.py:591: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return array(a, dtype, copy=False, order=order, subok=True)\n",
      "/usr/local/lib/python3.7/site-packages/pandas/core/frame.py:7005: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  correl = libalgos.nancorr(ensure_float64(mat), minp=min_periods)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            row_mean_x  row_mean_y\n",
      "row_mean_x     1.00000     0.95423\n",
      "row_mean_y     0.95423     1.00000\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the number of state preps needed under the \n",
    "ax = pd.merge(basis_states_mean_state_preps,\n",
    "         random_states_mean_state_preps,\n",
    "         left_index=True,\n",
    "         right_index=True)[['row_mean_x', 'row_mean_y']].plot.scatter(x=\"row_mean_x\", y=\"row_mean_y\")\n",
    "ax.set_xlabel(\"basis_mean_state_preps\")\n",
    "ax.set_ylabel(\"radom_mean_state_preps\")\n",
    "\n",
    "# correlation between number of state preparations needed under basis states versus random states\n",
    "print(pd.merge(basis_states_mean_state_preps,\n",
    "         random_states_mean_state_preps,\n",
    "         left_index=True,\n",
    "         right_index=True)[['row_mean_x', 'row_mean_y']].corr())\n",
    "\n",
    "# There is very high correlation between the number of state preparations needed between\n",
    "# basis states and random states, for term set ['-XX', '-YY', 'ZZ', 'IZ', 'ZI'], at least.\n",
    "# Could this be because only -XX and -YY ever have a positive correlation?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9542299044099286\n"
     ]
    }
   ],
   "source": [
    "print(pd.merge(basis_states_mean_state_preps,\n",
    "         random_states_mean_state_preps,\n",
    "         left_index=True,\n",
    "         right_index=True)[['row_mean_x', 'row_mean_y']].corr().iloc[0,1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hypothesis: There is a high correlation between the # of state preps needed in basis states versus random states when the number of terms that correlate is low. Low correlation when the number of terms that correlate is high.\n",
    "### Result: Not conclusive that this is true!  Between different runs, the relative agreement between mean # of state preparations in basis states versus random states varies pretty widely."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   term 1 term 2  covariance\n",
      "0      XX     YY     (-1+0j)\n",
      "1      XX     ZZ          0j\n",
      "2      XX     II          0j\n",
      "3      XX     XI          0j\n",
      "4      XX     YZ          0j\n",
      "5      XX     ZY          0j\n",
      "6      XX     IX          0j\n",
      "7      YY     ZZ          0j\n",
      "8      YY     II          0j\n",
      "9      YY     XZ          0j\n",
      "10     YY     YI          0j\n",
      "11     YY     ZX          0j\n",
      "12     YY     IY          0j\n",
      "13     ZZ     II          0j\n",
      "14     ZZ     XY          0j\n",
      "15     ZZ     YX          0j\n",
      "16     ZZ     ZI          0j\n",
      "17     ZZ     IZ          0j\n",
      "18     II     XY          0j\n",
      "19     II     XZ          0j\n",
      "20     II     XI          0j\n",
      "21     II     YX          0j\n",
      "22     II     YZ          0j\n",
      "23     II     YI          0j\n",
      "24     II     ZX          0j\n",
      "25     II     ZY          0j\n",
      "26     II     ZI          0j\n",
      "27     II     IX          0j\n",
      "28     II     IY          0j\n",
      "29     II     IZ          0j\n",
      "30     XY     XI          0j\n",
      "31     XY     YX      (1+0j)\n",
      "32     XY     YZ          0j\n",
      "33     XY     ZX          0j\n",
      "34     XY     IY          0j\n",
      "35     XZ     XI      (1+0j)\n",
      "36     XZ     YX          0j\n",
      "37     XZ     ZX          0j\n",
      "38     XZ     ZY          0j\n",
      "39     XZ     IZ          0j\n",
      "40     XI     IX          0j\n",
      "41     XI     IY          0j\n",
      "42     XI     IZ          0j\n",
      "43     YX     YI          0j\n",
      "44     YX     ZY          0j\n",
      "45     YX     IX          0j\n",
      "46     YZ     YI      (1+0j)\n",
      "47     YZ     ZX          0j\n",
      "48     YZ     ZY          0j\n",
      "49     YZ     IZ          0j\n",
      "50     YI     IX          0j\n",
      "51     YI     IY          0j\n",
      "52     YI     IZ          0j\n",
      "53     ZX     ZI          0j\n",
      "54     ZX     IX      (1+0j)\n",
      "55     ZY     ZI          0j\n",
      "56     ZY     IY      (1+0j)\n",
      "57     ZI     IX          0j\n",
      "58     ZI     IY          0j\n",
      "59     ZI     IZ          0j\n",
      "   term 1 term 2  covariance\n",
      "0      XX     YY      (1+0j)\n",
      "1      XX     ZZ          0j\n",
      "2      XX     II          0j\n",
      "3      XX     XI          0j\n",
      "4      XX     YZ          0j\n",
      "5      XX     ZY          0j\n",
      "6      XX     IX          0j\n",
      "7      YY     ZZ          0j\n",
      "8      YY     II          0j\n",
      "9      YY     XZ          0j\n",
      "10     YY     YI          0j\n",
      "11     YY     ZX          0j\n",
      "12     YY     IY          0j\n",
      "13     ZZ     II          0j\n",
      "14     ZZ     XY          0j\n",
      "15     ZZ     YX          0j\n",
      "16     ZZ     ZI          0j\n",
      "17     ZZ     IZ          0j\n",
      "18     II     XY          0j\n",
      "19     II     XZ          0j\n",
      "20     II     XI          0j\n",
      "21     II     YX          0j\n",
      "22     II     YZ          0j\n",
      "23     II     YI          0j\n",
      "24     II     ZX          0j\n",
      "25     II     ZY          0j\n",
      "26     II     ZI          0j\n",
      "27     II     IX          0j\n",
      "28     II     IY          0j\n",
      "29     II     IZ          0j\n",
      "30     XY     XI          0j\n",
      "31     XY     YX     (-1+0j)\n",
      "32     XY     YZ          0j\n",
      "33     XY     ZX          0j\n",
      "34     XY     IY          0j\n",
      "35     XZ     XI     (-1+0j)\n",
      "36     XZ     YX          0j\n",
      "37     XZ     ZX          0j\n",
      "38     XZ     ZY          0j\n",
      "39     XZ     IZ          0j\n",
      "40     XI     IX          0j\n",
      "41     XI     IY          0j\n",
      "42     XI     IZ          0j\n",
      "43     YX     YI          0j\n",
      "44     YX     ZY          0j\n",
      "45     YX     IX          0j\n",
      "46     YZ     YI     (-1+0j)\n",
      "47     YZ     ZX          0j\n",
      "48     YZ     ZY          0j\n",
      "49     YZ     IZ          0j\n",
      "50     YI     IX          0j\n",
      "51     YI     IY          0j\n",
      "52     YI     IZ          0j\n",
      "53     ZX     ZI          0j\n",
      "54     ZX     IX      (1+0j)\n",
      "55     ZY     ZI          0j\n",
      "56     ZY     IY      (1+0j)\n",
      "57     ZI     IX          0j\n",
      "58     ZI     IY          0j\n",
      "59     ZI     IZ          0j\n",
      "   term 1 term 2  covariance\n",
      "0      XX     YY      (1+0j)\n",
      "1      XX     ZZ          0j\n",
      "2      XX     II          0j\n",
      "3      XX     XI          0j\n",
      "4      XX     YZ          0j\n",
      "5      XX     ZY          0j\n",
      "6      XX     IX          0j\n",
      "7      YY     ZZ          0j\n",
      "8      YY     II          0j\n",
      "9      YY     XZ          0j\n",
      "10     YY     YI          0j\n",
      "11     YY     ZX          0j\n",
      "12     YY     IY          0j\n",
      "13     ZZ     II          0j\n",
      "14     ZZ     XY          0j\n",
      "15     ZZ     YX          0j\n",
      "16     ZZ     ZI          0j\n",
      "17     ZZ     IZ          0j\n",
      "18     II     XY          0j\n",
      "19     II     XZ          0j\n",
      "20     II     XI          0j\n",
      "21     II     YX          0j\n",
      "22     II     YZ          0j\n",
      "23     II     YI          0j\n",
      "24     II     ZX          0j\n",
      "25     II     ZY          0j\n",
      "26     II     ZI          0j\n",
      "27     II     IX          0j\n",
      "28     II     IY          0j\n",
      "29     II     IZ          0j\n",
      "30     XY     XI          0j\n",
      "31     XY     YX     (-1+0j)\n",
      "32     XY     YZ          0j\n",
      "33     XY     ZX          0j\n",
      "34     XY     IY          0j\n",
      "35     XZ     XI      (1+0j)\n",
      "36     XZ     YX          0j\n",
      "37     XZ     ZX          0j\n",
      "38     XZ     ZY          0j\n",
      "39     XZ     IZ          0j\n",
      "40     XI     IX          0j\n",
      "41     XI     IY          0j\n",
      "42     XI     IZ          0j\n",
      "43     YX     YI          0j\n",
      "44     YX     ZY          0j\n",
      "45     YX     IX          0j\n",
      "46     YZ     YI      (1+0j)\n",
      "47     YZ     ZX          0j\n",
      "48     YZ     ZY          0j\n",
      "49     YZ     IZ          0j\n",
      "50     YI     IX          0j\n",
      "51     YI     IY          0j\n",
      "52     YI     IZ          0j\n",
      "53     ZX     ZI          0j\n",
      "54     ZX     IX     (-1+0j)\n",
      "55     ZY     ZI          0j\n",
      "56     ZY     IY     (-1+0j)\n",
      "57     ZI     IX          0j\n",
      "58     ZI     IY          0j\n",
      "59     ZI     IZ          0j\n",
      "   term 1 term 2  covariance\n",
      "0      XX     YY     (-1+0j)\n",
      "1      XX     ZZ          0j\n",
      "2      XX     II          0j\n",
      "3      XX     XI          0j\n",
      "4      XX     YZ          0j\n",
      "5      XX     ZY          0j\n",
      "6      XX     IX          0j\n",
      "7      YY     ZZ          0j\n",
      "8      YY     II          0j\n",
      "9      YY     XZ          0j\n",
      "10     YY     YI          0j\n",
      "11     YY     ZX          0j\n",
      "12     YY     IY          0j\n",
      "13     ZZ     II          0j\n",
      "14     ZZ     XY          0j\n",
      "15     ZZ     YX          0j\n",
      "16     ZZ     ZI          0j\n",
      "17     ZZ     IZ          0j\n",
      "18     II     XY          0j\n",
      "19     II     XZ          0j\n",
      "20     II     XI          0j\n",
      "21     II     YX          0j\n",
      "22     II     YZ          0j\n",
      "23     II     YI          0j\n",
      "24     II     ZX          0j\n",
      "25     II     ZY          0j\n",
      "26     II     ZI          0j\n",
      "27     II     IX          0j\n",
      "28     II     IY          0j\n",
      "29     II     IZ          0j\n",
      "30     XY     XI          0j\n",
      "31     XY     YX      (1+0j)\n",
      "32     XY     YZ          0j\n",
      "33     XY     ZX          0j\n",
      "34     XY     IY          0j\n",
      "35     XZ     XI     (-1+0j)\n",
      "36     XZ     YX          0j\n",
      "37     XZ     ZX          0j\n",
      "38     XZ     ZY          0j\n",
      "39     XZ     IZ          0j\n",
      "40     XI     IX          0j\n",
      "41     XI     IY          0j\n",
      "42     XI     IZ          0j\n",
      "43     YX     YI          0j\n",
      "44     YX     ZY          0j\n",
      "45     YX     IX          0j\n",
      "46     YZ     YI     (-1+0j)\n",
      "47     YZ     ZX          0j\n",
      "48     YZ     ZY          0j\n",
      "49     YZ     IZ          0j\n",
      "50     YI     IX          0j\n",
      "51     YI     IY          0j\n",
      "52     YI     IZ          0j\n",
      "53     ZX     ZI          0j\n",
      "54     ZX     IX     (-1+0j)\n",
      "55     ZY     ZI          0j\n",
      "56     ZY     IY     (-1+0j)\n",
      "57     ZI     IX          0j\n",
      "58     ZI     IY          0j\n",
      "59     ZI     IZ          0j\n"
     ]
    }
   ],
   "source": [
    "for state in basis_states_4:\n",
    "    print(pairwise_covariances_commuting_terms(['XX', 'YY', 'ZZ', 'II',\n",
    "                                                'XY', 'XZ', 'XI',\n",
    "                                                'YX', 'YZ', 'YI',\n",
    "                                                'ZX', 'ZY', 'ZI',\n",
    "                                                'IX', 'IY', 'IZ'], state))\n",
    "    \n",
    "# Interestingly, across all 60 pairs of terms that commute, only 6 pairs ever correlate under a basis state:\n",
    "# XX YY\n",
    "# XY YX\n",
    "# XZ XI\n",
    "# YZ YI\n",
    "# ZX IX\n",
    "# ZY IY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "term_set_0_correlate = ['XX','YZ','ZZ','ZI']    # all pairwise correlations are 0\n",
    "term_set_1_correlate = ['XX','YY','ZZ','ZI']    # Cov(XX,YY) = +1 under 01,10; -1 under 00,11\n",
    "term_set_2_correlate = ['XY', 'YX', 'YZ', 'YI'] # Cov(XY,YX) = +1 under 00,11; -1 under 01,10\n",
    "                                                # Cov(YZ,YI) = +1 under 00,01; -1 under 10,11"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  term 1 term 2  covariance\n",
      "0     XY     YX      (1+0j)\n",
      "1     XY     YZ          0j\n",
      "2     YX     YI          0j\n",
      "3     YZ     YI      (1+0j)\n",
      "  term 1 term 2  covariance\n",
      "0     XY     YX     (-1+0j)\n",
      "1     XY     YZ          0j\n",
      "2     YX     YI          0j\n",
      "3     YZ     YI     (-1+0j)\n",
      "  term 1 term 2  covariance\n",
      "0     XY     YX     (-1+0j)\n",
      "1     XY     YZ          0j\n",
      "2     YX     YI          0j\n",
      "3     YZ     YI      (1+0j)\n",
      "  term 1 term 2  covariance\n",
      "0     XY     YX      (1+0j)\n",
      "1     XY     YZ          0j\n",
      "2     YX     YI          0j\n",
      "3     YZ     YI     (-1+0j)\n"
     ]
    }
   ],
   "source": [
    "for state in basis_states_4:\n",
    "    print(pairwise_covariances_commuting_terms(term_set_2_correlate, state))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### When 0 terms correlate, all partitions have identical number of state preps under all basis states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n",
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n"
     ]
    }
   ],
   "source": [
    "random_state_list = [qutip.rand_ket(4).full() for i in range(4)]\n",
    "basis_states_mean_state_preps_0 = expected_state_preps_for_list_of_states(term_set_0_correlate, basis_states_4)\n",
    "random_states_mean_state_preps_0 = expected_state_preps_for_list_of_states(term_set_0_correlate, random_state_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>00</th>\n",
       "      <th>01</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[XX, YZ], [ZZ, ZI]]</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[XX], [YZ], [ZZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[XX, YZ], [ZZ], [ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[YZ], [XX, ZZ], [ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[XX], [YZ], [ZZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   partition      00      01      10      11  row_mean  \\\n",
       "2       [[XX, YZ], [ZZ, ZI]]  (4+0j)  (4+0j)  (4+0j)  (4+0j)    (4+0j)   \n",
       "4     [[XX], [YZ], [ZZ, ZI]]  (6+0j)  (6+0j)  (6+0j)  (6+0j)    (6+0j)   \n",
       "11    [[XX, YZ], [ZZ], [ZI]]  (6+0j)  (6+0j)  (6+0j)  (6+0j)    (6+0j)   \n",
       "12    [[YZ], [XX, ZZ], [ZI]]  (6+0j)  (6+0j)  (6+0j)  (6+0j)    (6+0j)   \n",
       "14  [[XX], [YZ], [ZZ], [ZI]]  (8+0j)  (8+0j)  (8+0j)  (8+0j)    (8+0j)   \n",
       "\n",
       "    row_var  \n",
       "2       0.0  \n",
       "4       0.0  \n",
       "11      0.0  \n",
       "12      0.0  \n",
       "14      0.0  "
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "basis_states_mean_state_preps_0.columns.values[1:5] = ['00', '01', '10', '11']\n",
    "basis_states_mean_state_preps_0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>state0</th>\n",
       "      <th>state1</th>\n",
       "      <th>state2</th>\n",
       "      <th>state3</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[XX, YZ], [ZZ, ZI]]</td>\n",
       "      <td>(9.09+0j)</td>\n",
       "      <td>(6.54-0j)</td>\n",
       "      <td>(6.37-0j)</td>\n",
       "      <td>(4.35-0j)</td>\n",
       "      <td>(6.59+0j)</td>\n",
       "      <td>2.84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[XX, YZ], [ZZ], [ZI]]</td>\n",
       "      <td>(13.68+0j)</td>\n",
       "      <td>(9.45-0j)</td>\n",
       "      <td>(8.15-0j)</td>\n",
       "      <td>(5.08-0j)</td>\n",
       "      <td>(9.09+0j)</td>\n",
       "      <td>9.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[XX], [YZ], [ZZ, ZI]]</td>\n",
       "      <td>(9.94+0j)</td>\n",
       "      <td>(10.87-0j)</td>\n",
       "      <td>(11.98-0j)</td>\n",
       "      <td>(11.08+0j)</td>\n",
       "      <td>(10.97-0j)</td>\n",
       "      <td>0.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[YZ], [XX, ZZ], [ZI]]</td>\n",
       "      <td>(12.86+0j)</td>\n",
       "      <td>(12.69+0j)</td>\n",
       "      <td>(10.82-0j)</td>\n",
       "      <td>(7.87+0j)</td>\n",
       "      <td>(11.06+0j)</td>\n",
       "      <td>4.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[XX], [YZ], [ZZ], [ZI]]</td>\n",
       "      <td>(13.3+0j)</td>\n",
       "      <td>(14.02-0j)</td>\n",
       "      <td>(14.09-0j)</td>\n",
       "      <td>(12.85+0j)</td>\n",
       "      <td>(13.57-0j)</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   partition      state0      state1      state2      state3  \\\n",
       "2       [[XX, YZ], [ZZ, ZI]]   (9.09+0j)   (6.54-0j)   (6.37-0j)   (4.35-0j)   \n",
       "11    [[XX, YZ], [ZZ], [ZI]]  (13.68+0j)   (9.45-0j)   (8.15-0j)   (5.08-0j)   \n",
       "4     [[XX], [YZ], [ZZ, ZI]]   (9.94+0j)  (10.87-0j)  (11.98-0j)  (11.08+0j)   \n",
       "12    [[YZ], [XX, ZZ], [ZI]]  (12.86+0j)  (12.69+0j)  (10.82-0j)   (7.87+0j)   \n",
       "14  [[XX], [YZ], [ZZ], [ZI]]   (13.3+0j)  (14.02-0j)  (14.09-0j)  (12.85+0j)   \n",
       "\n",
       "      row_mean  row_var  \n",
       "2    (6.59+0j)     2.84  \n",
       "11   (9.09+0j)     9.53  \n",
       "4   (10.97-0j)     0.53  \n",
       "12  (11.06+0j)     4.03  \n",
       "14  (13.57-0j)     0.27  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random_states_mean_state_preps_0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9509515603712968+0j)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# High correlation between the number of state preps under random states and basis states\n",
    "np.corrcoef(basis_states_mean_state_preps_0['row_mean'],\n",
    "           random_states_mean_state_preps_0['row_mean'])[0,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### When 1 pair correlates AND those correlating terms are in the same grouping, then the states where they negatively correlate have low # of state preps, and the states where they positively correlate have high # of state preps."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n",
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n"
     ]
    }
   ],
   "source": [
    "basis_states_mean_state_preps_1 = expected_state_preps_for_list_of_states(term_set_1_correlate, basis_states_4)\n",
    "random_states_mean_state_preps_1 = expected_state_preps_for_list_of_states(term_set_1_correlate, random_state_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>00</th>\n",
       "      <th>01</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[XX, YY], [ZZ, ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[[XX, YY, ZZ], [ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(4+0j)</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[XX, YY], [ZZ], [ZI]]</td>\n",
       "      <td>0j</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>(12+0j)</td>\n",
       "      <td>0j</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[XX], [YY], [ZZ, ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[[XX], [YY, ZZ], [ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[YY], [XX, ZZ], [ZI]]</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>(6+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[XX], [YY], [ZZ], [ZI]]</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>(8+0j)</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   partition      00       01       10      11  row_mean  \\\n",
       "2       [[XX, YY], [ZZ, ZI]]      0j   (8+0j)   (8+0j)      0j    (4+0j)   \n",
       "5       [[XX, YY, ZZ], [ZI]]      0j   (8+0j)   (8+0j)      0j    (4+0j)   \n",
       "11    [[XX, YY], [ZZ], [ZI]]      0j  (12+0j)  (12+0j)      0j    (6+0j)   \n",
       "4     [[XX], [YY], [ZZ, ZI]]  (6+0j)   (6+0j)   (6+0j)  (6+0j)    (6+0j)   \n",
       "7     [[XX], [YY, ZZ], [ZI]]  (6+0j)   (6+0j)   (6+0j)  (6+0j)    (6+0j)   \n",
       "12    [[YY], [XX, ZZ], [ZI]]  (6+0j)   (6+0j)   (6+0j)  (6+0j)    (6+0j)   \n",
       "14  [[XX], [YY], [ZZ], [ZI]]  (8+0j)   (8+0j)   (8+0j)  (8+0j)    (8+0j)   \n",
       "\n",
       "    row_var  \n",
       "2      16.0  \n",
       "5      16.0  \n",
       "11     36.0  \n",
       "4       0.0  \n",
       "7       0.0  \n",
       "12      0.0  \n",
       "14      0.0  "
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "basis_states_mean_state_preps_1.columns.values[1:5] = ['00', '01', '10', '11']\n",
    "basis_states_mean_state_preps_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>partition</th>\n",
       "      <th>state0</th>\n",
       "      <th>state1</th>\n",
       "      <th>state2</th>\n",
       "      <th>state3</th>\n",
       "      <th>row_mean</th>\n",
       "      <th>row_var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[[XX, YY, ZZ], [ZI]]</td>\n",
       "      <td>(7.65+0j)</td>\n",
       "      <td>(8.57+0j)</td>\n",
       "      <td>(5.12-0j)</td>\n",
       "      <td>(3.3+0j)</td>\n",
       "      <td>(6.16+0j)</td>\n",
       "      <td>4.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[[XX, YY], [ZZ, ZI]]</td>\n",
       "      <td>(6.88-0j)</td>\n",
       "      <td>(5.66-0j)</td>\n",
       "      <td>(5.6+0j)</td>\n",
       "      <td>(7+0j)</td>\n",
       "      <td>(6.28-0j)</td>\n",
       "      <td>0.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>[[XX, YY], [ZZ], [ZI]]</td>\n",
       "      <td>(10.36-0j)</td>\n",
       "      <td>(8.13-0j)</td>\n",
       "      <td>(6.98+0j)</td>\n",
       "      <td>(9.05+0j)</td>\n",
       "      <td>(8.63-0j)</td>\n",
       "      <td>1.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[[XX], [YY, ZZ], [ZI]]</td>\n",
       "      <td>(8.01+0j)</td>\n",
       "      <td>(13.04+0j)</td>\n",
       "      <td>(11.1-0j)</td>\n",
       "      <td>(7.61+0j)</td>\n",
       "      <td>(9.94+0j)</td>\n",
       "      <td>5.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[[XX], [YY], [ZZ, ZI]]</td>\n",
       "      <td>(9.73+0j)</td>\n",
       "      <td>(10.85-0j)</td>\n",
       "      <td>(12.07-0j)</td>\n",
       "      <td>(11.38+0j)</td>\n",
       "      <td>(11.01-0j)</td>\n",
       "      <td>0.73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>[[YY], [XX, ZZ], [ZI]]</td>\n",
       "      <td>(12.65+0j)</td>\n",
       "      <td>(12.66+0j)</td>\n",
       "      <td>(10.9-0j)</td>\n",
       "      <td>(8.17+0j)</td>\n",
       "      <td>(11.1+0j)</td>\n",
       "      <td>3.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>[[XX], [YY], [ZZ], [ZI]]</td>\n",
       "      <td>(13.02+0j)</td>\n",
       "      <td>(13.99-0j)</td>\n",
       "      <td>(14.21-0j)</td>\n",
       "      <td>(13.25+0j)</td>\n",
       "      <td>(13.62-0j)</td>\n",
       "      <td>0.24</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   partition      state0      state1      state2      state3  \\\n",
       "5       [[XX, YY, ZZ], [ZI]]   (7.65+0j)   (8.57+0j)   (5.12-0j)    (3.3+0j)   \n",
       "2       [[XX, YY], [ZZ, ZI]]   (6.88-0j)   (5.66-0j)    (5.6+0j)      (7+0j)   \n",
       "11    [[XX, YY], [ZZ], [ZI]]  (10.36-0j)   (8.13-0j)   (6.98+0j)   (9.05+0j)   \n",
       "7     [[XX], [YY, ZZ], [ZI]]   (8.01+0j)  (13.04+0j)   (11.1-0j)   (7.61+0j)   \n",
       "4     [[XX], [YY], [ZZ, ZI]]   (9.73+0j)  (10.85-0j)  (12.07-0j)  (11.38+0j)   \n",
       "12    [[YY], [XX, ZZ], [ZI]]  (12.65+0j)  (12.66+0j)   (10.9-0j)   (8.17+0j)   \n",
       "14  [[XX], [YY], [ZZ], [ZI]]  (13.02+0j)  (13.99-0j)  (14.21-0j)  (13.25+0j)   \n",
       "\n",
       "      row_mean  row_var  \n",
       "5    (6.16+0j)     4.33  \n",
       "2    (6.28-0j)     0.43  \n",
       "11   (8.63-0j)     1.53  \n",
       "7    (9.94+0j)     5.03  \n",
       "4   (11.01-0j)     0.73  \n",
       "12   (11.1+0j)     3.37  \n",
       "14  (13.62-0j)     0.24  "
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random_states_mean_state_preps_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9525541126498063+0j)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.corrcoef(basis_states_mean_state_preps_1['row_mean'],\n",
    "           random_states_mean_state_preps_1['row_mean'])[0,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### When 2 pairs correlate, then in the state where both pairs negatively correlate, there is a low # of state preps needed.\n",
    "#### In the state where both pairs positively correlate, there is a high # of state preps needed.\n",
    "#### In the state where one pair is positive and one pair is negative, there is an intermediate # of state preps needed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n",
      "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py:36: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return umr_sum(a, axis, dtype, out, keepdims, initial)\n"
     ]
    }
   ],
   "source": [
    "basis_states_mean_state_preps_2 = expected_state_preps_for_list_of_states(term_set_2_correlate, basis_states_4)\n",
    "random_states_mean_state_preps_2 = expected_state_preps_for_list_of_states(term_set_2_correlate, random_state_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "basis_states_mean_state_preps_2.columns.values[1:5] = ['00', '01', '10', '11']\n",
    "basis_states_mean_state_preps_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_states_mean_state_preps_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.corrcoef(basis_states_mean_state_preps_2['row_mean'],\n",
    "           random_states_mean_state_preps_2['row_mean'])[0,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lithium Hydride"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Read in Hamiltonians"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def construct_full_term_string(specified_term_list, n):\n",
    "    \"\"\"\n",
    "    Given a list of terms, e.g. ['X1', 'Z3'] \n",
    "    Input:\n",
    "      List of specified terms: e.g. ['X1', 'Z3']\n",
    "      Number of total terms: e.g. 4\n",
    "    Outputs:\n",
    "      String of the full term, e.g. IXIZ\n",
    "    \"\"\"\n",
    "    building_string = ['I']*n # default is that the position should be an I\n",
    "    for term in specified_term_list:\n",
    "        split_string = list(term) # e.g. list('X1') becomes ['X', '1']\n",
    "        building_string[int(split_string[1])] = split_string[0]\n",
    "    return(''.join(building_string))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from term_grouping import parseHamiltonian\n",
    "sample_h1 = parseHamiltonian('hamiltonians/sampleH1.txt')\n",
    "sample_h1_terms = [construct_full_term_string(x[1], 4) for x in sample_h1]\n",
    "sample_h1_coefs = [x[0] for x in sample_h1]\n",
    "print(sample_h1_terms)\n",
    "print(sample_h1_coefs)\n",
    "\n",
    "lih_jw = parseHamiltonian('hamiltonians/LiH_JW.txt')\n",
    "lih_jw_terms = [construct_full_term_string(x[1], 4) for x in lih_jw]\n",
    "lih_jw_coefs = [x[0] for x in lih_jw]\n",
    "print(lih_jw_terms)\n",
    "print(lih_jw_coefs)\n",
    "\n",
    "lih_bk = parseHamiltonian('hamiltonians/LiH_BK.txt')\n",
    "lih_bk_terms = [construct_full_term_string(x[1], 4) for x in lih_bk]\n",
    "lih_bk_coefs = [x[0] for x in lih_bk]\n",
    "print(lih_bk_terms)\n",
    "print(lih_bk_coefs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "basis_states_16 = [qutip.basis(16,i).full() for i in range(16)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# TIMES OUT\n",
    "# calculate_expected_state_preps_valid_partitions(lih_jw_terms, basis_states_16[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimal groupings for LiH_BK"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.85843576+0.j]]\n",
      "[[0.8495231+0.j]]\n",
      "[[-0.62134371+0.j]]\n"
     ]
    }
   ],
   "source": [
    "state = qutip.rand_ket_haar(4).full()\n",
    "print(variance(XX, state))\n",
    "print(variance(ZZ, state))\n",
    "print(covariance(XX, ZZ, state))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.67046623+0.j]]\n",
      "[[0.68759057+0.j]]\n"
     ]
    }
   ],
   "source": [
    "# step 2, get expected_value()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimal groupings for LiH_JW"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimal groupings for XX + ZZ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compare these two settings:\n",
    "# Setting A: {XX}, {ZZ}. Therefore, we have total_variance_A is 2*(Var[XX] + Var[ZZ])\n",
    "# Setting B: {XX, ZZ}. Therefore, we have total_variance_B is Var[XX] + Var[ZZ] + 2Cov[XX, ZZ]\n",
    "\n",
    "expected_state_preps_delta = []\n",
    "\n",
    "for _ in range(2000):\n",
    "    state = qutip.rand_ket_haar(4).full()\n",
    "    \n",
    "    # Setting A: {XX}, {ZZ}\n",
    "    XX_outcomes, ZZ_outcomes = [], []\n",
    "    for _ in range(50):\n",
    "        XX_outcome = measure(XX, state)\n",
    "        XX_outcomes.append(XX_outcome)\n",
    "    for _ in range(50):\n",
    "        ZZ_outcome = measure(ZZ, state)\n",
    "        ZZ_outcomes.append(ZZ_outcome)\n",
    "    expected_state_preps_A = 2 * (np.var(XX_outcomes) + np.var(ZZ_outcomes))\n",
    "    \n",
    "    # Setting B: {XX, ZZ}\n",
    "    XX_outcomes, ZZ_outcomes = [], []\n",
    "    for _ in range(50):\n",
    "        XX_outcome, ZZ_outcome = simultaneous_measure([XX, ZZ], state)\n",
    "        XX_outcomes.append(XX_outcome)\n",
    "        ZZ_outcomes.append(ZZ_outcome)\n",
    "    expected_state_preps_B = np.var(XX_outcomes) + np.var(ZZ_outcomes) + 2 * np.cov(XX_outcomes, ZZ_outcomes)[0][1]\n",
    "\n",
    "    expected_state_preps_delta.append(expected_state_preps_A - expected_state_preps_B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.hist(expected_state_preps_delta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 398,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "48"
      ]
     },
     "execution_count": 398,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len([delta for delta in expected_state_preps_delta if delta < 0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test Aspuru Guzik case of \\{-XX\\}, \\{-YY, ZZ\\}, \\{ZI, IZ\\} versus \\{-XX, -YY, ZZ\\}, \\{ZI, IZ\\}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### This code was used to generate the plots in the arxiv paper"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "Background:\n",
    "    If we simultaneously measure both, then the expected number of measurements to get to precision epsilon will be proportional to Var(XX) + Var(ZZ) + 2Cov(XX,ZZ)\n",
    "    If we measure separately, then the expected number of measurements to get to precision epsilon will be proportional to 2*[Var(XX) + Var(ZZ)] where the 2* penalty comes from the extra grouping\n",
    "    \n",
    "Therefore, we will want to measure simultaneously if:\n",
    "    Var(XX) + Var(ZZ) + 2*Cov(XX,ZZ) < 2*(Var(XX) + Var(ZZ))\n",
    "    equivalently, 2*Cov(XX,ZZ) < Var(XX) + Var(ZZ)\n",
    "And we will want to measure separately if\n",
    "    Var(XX) + Var(ZZ) + 2*Cov(XX,ZZ) > 2*(Var(XX) + Var(ZZ))\n",
    "    equivalently, 2*Cov(XX,ZZ) > Var(XX) + Var(ZZ)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Therefore, we will want to measure simultaneously if:\n",
    "    Var(XX) + Var(YY) + Var(ZZ) + 2*Cov(XX,YY) + 2*Cov(XX,ZZ) + 2*Cov(YY,ZZ) < 2*(Var(XX) + Var(YY) + Var(ZZ) + 2*Cov(YY,ZZ))\n",
    "    equivalently, 2*Cov(XX,ZZ) + 2*Cov(XX,YY) < Var(XX) + Var(YY) + Var(ZZ) + 2*Cov(YY,ZZ)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:20: RuntimeWarning: Degrees of freedom <= 0 for slice\n",
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:21: RuntimeWarning: Degrees of freedom <= 0 for slice\n"
     ]
    }
   ],
   "source": [
    "def simulate_aspuru_guzik(n_random_states, n_iterations, state = qutip.rand_ket_haar(4).full()):\n",
    "    LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list = [], [], [], []\n",
    "    \n",
    "    LHS_empirical_list_of_lists, RHS_empirical_list_of_lists = [], []\n",
    "    \n",
    "    for j in range(n_random_states):\n",
    "        \n",
    "        XX_outcomes, YY_outcomes, ZZ_outcomes, IZ_outcomes, ZI_outcomes = [], [], [], [], []\n",
    "        \n",
    "        LHS_empirical_sublist, RHS_empirical_sublist = [], []\n",
    "        \n",
    "        for i in range(n_iterations):\n",
    "            XX_outcome, YY_outcome, ZZ_outcome = simultaneous_measure([XX, YY, ZZ], state)\n",
    "            IZ_outcome, ZI_outcome = simultaneous_measure([IZ, ZI], state)\n",
    "            XX_outcomes.append(XX_outcome)\n",
    "            YY_outcomes.append(YY_outcome)\n",
    "            ZZ_outcomes.append(ZZ_outcome)\n",
    "            IZ_outcomes.append(IZ_outcome)\n",
    "            ZI_outcomes.append(ZI_outcome)\n",
    "            sample_covariance_XXYYZZ = np.cov([XX_outcomes, YY_outcomes, ZZ_outcomes])\n",
    "            sample_covariance_IZZI = np.cov([IZ_outcomes, ZI_outcomes])\n",
    "            \n",
    "            LHS_empirical_sublist.append(4*sample_covariance_XXYYZZ[0][2] + 4*sample_covariance_XXYYZZ[0][1])\n",
    "            RHS_empirical_sublist.append(sample_covariance_XXYYZZ[0][0] + sample_covariance_XXYYZZ[1][1] + sample_covariance_XXYYZZ[2][2] +\\\n",
    "                 sample_covariance_IZZI[0][0] + sample_covariance_IZZI[1][1] + 2*sample_covariance_XXYYZZ[1][2] +\\\n",
    "                 2*sample_covariance_IZZI[0][1])\n",
    "            \n",
    "        LHS_empirical = 4*sample_covariance_XXYYZZ[0][2] + 4*sample_covariance_XXYYZZ[0][1]\n",
    "        RHS_empirical = sample_covariance_XXYYZZ[0][0] + sample_covariance_XXYYZZ[1][1] + sample_covariance_XXYYZZ[2][2] +\\\n",
    "                 sample_covariance_IZZI[0][0] + sample_covariance_IZZI[1][1] + 2*sample_covariance_XXYYZZ[1][2] +\\\n",
    "                 2*sample_covariance_IZZI[0][1]\n",
    "        LHS_theoretical = 4*covariance(XX, ZZ, state) + 4*covariance(XX, YY, state)\n",
    "        RHS_theoretical = variance(XX, state) + variance(YY, state)+ variance(ZZ, state) + variance(IZ, state) + variance(ZI, state) + \\\n",
    "                 2*covariance(YY, ZZ, state) + 2*covariance(IZ, ZI, state)\n",
    "        \n",
    "        LHS_empirical_list_of_lists.append(LHS_empirical_sublist)\n",
    "        RHS_empirical_list_of_lists.append(RHS_empirical_sublist)\n",
    "\n",
    "        LHS_empirical_list.append(LHS_empirical)\n",
    "        RHS_empirical_list.append(RHS_empirical)\n",
    "        LHS_theoretical_list.append(LHS_theoretical.item())\n",
    "        RHS_theoretical_list.append(RHS_theoretical.item())\n",
    "#        import pdb; pdb.set_trace()\n",
    "            \n",
    "    return(LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list,\n",
    "           LHS_empirical_list_of_lists, RHS_empirical_list_of_lists)\n",
    "            \n",
    "#             if (LHS_empirical > RHS_empirical) & (i > 10):\n",
    "#                 print(\"Separate them! Iterations:\", i)\n",
    "#                 return(state)\n",
    "\n",
    "random.seed(42)\n",
    "\n",
    "LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list, LHS_empirical_list_of_lists, RHS_empirical_list_of_lists = simulate_aspuru_guzik(20,100,  state = np.array([[0],[1],[0],[0]]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "SMALL_SIZE = 8\n",
    "MEDIUM_SIZE = 10\n",
    "BIGGER_SIZE = 12\n",
    "\n",
    "plt.rc('font', size=12)          # controls default text sizes\n",
    "plt.rc('axes', titlesize=15)     # fontsize of the axes title\n",
    "plt.rc('axes', labelsize=14)    # fontsize of the x and y labels\n",
    "plt.rc('xtick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('ytick', labelsize=14)    # fontsize of the tick labels\n",
    "plt.rc('legend', fontsize=14)    # legend fontsize\n",
    "plt.rc('figure', titlesize=BIGGER_SIZE)  # fontsize of the figure title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:20: RuntimeWarning: Degrees of freedom <= 0 for slice\n",
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:21: RuntimeWarning: Degrees of freedom <= 0 for slice\n"
     ]
    },
    {
     "data": {
      "image/png": "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gkQigampqRj797//rXcEThAEtLS0QKvV/ujy/P398ejRIxw+fFiMERH27t0LHx8fWFpadptzZwRBwJQpU/CnP/0JDQ0NeqcFGetP+IgQY89AWFgY/Pz89G5PNjIyQmxsLLZt2wZ3d3e89NJL2LFjxzM5IvT5559jxYoVCA8Px8mTJ7F161asXr1a/IO+atUq5ObmYvLkyVixYgXc3NxQV1eH//znP9BqtfjrX//a62WuXr0aEydORFhYGFauXIn79+/jnXfewfDhw7FgwYJe95eamoro6GjExcVh4cKFuHHjBv785z9j/Pjxet/X9N1332HevHmYP38+Lly4gNWrV2PevHnitU1RUVHw8fGBr68vbGxsUFZWhv/+979Yvnw5AOC1117DzJkzERYWhpSUFPj4+KCpqQnV1dU4efIkVCpVj3KeO3cukpKS8OWXXyI+Ph7GxsbitNdeew1GRkZ4/fXXkZycjGvXriEtLQ3Ozs46fYwaNQparRZ///vf4e/vDxsbG50jUu3Cw8Mxbtw4JCQkYMOGDRg6dCh27NiB8+fP691C351Dhw7hgw8+QExMDFxdXaHRaLB+/Xq4uLjAw8OjV30x9kIx5JXajPUHXd3hU1BQQADo6V+zu3fvUmxsLMlkMnJwcKB3332X1q9f3+ldYxUVFTrzenp6UkJCgk4sMzOTAIh3arXPW1BQQDNmzCBLS0saNGgQpaSkUGtrq868tbW1lJSURM7OzmRqakpOTk4UERFBarVabBMQEEAhISE9rseJEydo0qRJJJVKydbWlmbNmkU3btzQadPTu8aIiPbv308+Pj4kCAINHjyYEhMTqa6uTpzeftfYjh07KDExkWxtbcnGxoYSExPp9KtArQAAARlJREFUwYMHYruNGzfS2LFjSSaTkYWFBf3qV7+irVu36iyrpaWFNmzYQCNHjiRBEGjQoEE0ceJE2rJli9imq+3dTqPRkJmZGQGg06dP603fvXs3jRgxgqRSKXl7e1NhYaFejVtaWmj58uXk4OBAEolErNXTd40REf3www+UmJhIgwcPJkEQyMfHh/bv36+zzISEBPL09NTLxczMjJRKJRE9uett1qxZNGzYMDIzMyMHBweKi4ujK1eudLmujPUHEiIig43CGGOMMcYMiK8RYowxxtiAxQMhxhhjjA1YPBBijDHG2IDFAyHGGGOMDVg8EGKMMcbYgMUDIcYYY4wNWDwQYowxxtiAxQMhxhhjjA1YPBBijDHG2ID1fyoI4iry7vSYAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# convergence graph\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "import matplotlib\n",
    "\n",
    "LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list, LHS_empirical_list_of_lists, RHS_empirical_list_of_lists = simulate_aspuru_guzik(20,100,  state = np.array([[0],[1],[0],[0]]))\n",
    "\n",
    "y = (np.array(LHS_empirical_list_of_lists) - np.array(RHS_empirical_list_of_lists))\n",
    "\n",
    "figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.xlabel(\"Number of observations\")\n",
    "plt.ylabel(\"$\\widehat{Var}(k=2) - \\widehat{Var}(k=3)$\")\n",
    "plt.yticks(np.arange(0, 4.01, step=1.0))\n",
    "plt.title(\"Empirical difference in $\\widehat{Var}(k=2)$ vs. $\\widehat{Var}(k=3)$ under state |01>\")\n",
    "for convergence_seq in y[0:10]:\n",
    "    plt.plot(list(range(1,100)),convergence_seq[1:], color=\"grey\")\n",
    "plt.axhline(y=2, linestyle=\"--\", color = 'red', label=\"True theoretical difference\")\n",
    "plt.legend()\n",
    "plt.savefig(\"empirical_covariance_convergence_graph_state01.png\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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KqWlpTF16lSmTp1KXl4ep59+Oo888kijArFjtSc0f5u2ZnuGUtvbF6r3IZw2DfecGe45uC5JSUlERkaGPHdu3boVnU5HRkaGf1l9352m/G5B0147oGHXj4Yem+ZQ3/Gsq3OlIcct1DYaev1oTLuf9IHY888/z4gRI/yvn3vuOYDj/qU4mk6nY9y4cbzxxhusXbs2aLhVKYWmaej1+qDo/7nnnjuu28n1ej0jR47kww8/ZO/evf6u4C1btvDFF18c/4epY19XXHEFCxYsYOPGjUHd//n5+SQlJTX7No4WznFvjv02hc6dO/vvpP3444+5/PLLg+48qs3CfmRuKpfLxZ/+9Cc8Ho//AuzxeNi8eTMXXnhhyH0NGjQIgLVr1wZctD0eD1u2bGHMmDEkJSWxaNEizjnnHP785z8zf/78OuteO6coHHXNKfJ4PEycOJHvv/+ejz76yF/Huqxbt45rrrkmrH1ecMEFxMfH884777BlyxbOOOOMgD/EPB4PFRUVWK1W/7Lk5GTS09MDHrtTVVXF3r17SUxMDBpSOVo47QnN26at2Z61Q7JHcrlcvPbaa0RERIQMssNp03DPmeGeg4+1nxEjRvDRRx+xe/duf7CZm5vLggULOOecc4iNja33uxPud6uhmvLaUbu9cK8f4R6b5hDu8azNtXZ0gNWQ4xZqG+FeP5qi3VstEPvss8+CbvkGX46h452rEcquXbu45JJLuOiii/j+++954403uPrqq+v8a/N4zJo1iy+//JJzzz2Xm266iR49epCTk8N7773HqlWriIuL4+KLL+b111/HarXSs2dPvv/+e5YtWxaUriNcDzzwAJ9//jlDhgxh6tSpuN1unnvuObKysvyTdpvKY489xooVKzjzzDO58cYb6dmzJ0VFRaxbt45ly5aFNbTRFNs4WjjHvTn221h6vZ6uXbv685QdPXQG0K9fPyIjI/15o+x2O6+//rq/i7/2+7t9+3aqq6vr/D537NiRXr16sWzZMv74xz/6l9eu17t3b8CX2+nf//43119/Pf379w9KuVCrKeYU/fWvf+Xjjz9m7NixFBUVBSRwBd9QQK2ff/6ZoqIiLr300rC2bTQaufzyy3n77beprKzkqaeeCni/vLyctm3bMn78ePr27Ut0dDTLli1jzZo1AX85//TTTwwbNoz777+fmTNnHnOf4bQnNG+b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oqKiGq916tQp7rjjDsxmM2FhYbz44ovYbDaXc3JycnjggQcIDw/H19eXHj16sGLFCpdz+vfvz+DBg5kzZw6pqakYjcYa55xv9erV3HDDDfj5+REcHMyYMWPIzs523q/RaPjmm29YvXo1Go2mzqHbL774gq5du+Lr60tYWBiPPPII+fn5Nc4rKyvjkUceITg4mKCgIB555BFKS0ud91ssFl566SUSEhLw8fEhPDycgQMHcuDAAec5VVVVvPLKKyQlJWE0GmnTpg3/+Mc/XF7n1VdfxdfXly1bttC3b19MJhMTJkygXbt2jB8/vkZd7733Hj4+Ps6a33//fa699lqCg4Np1aoVAwYMYP369S7P/9prr1FZWelsn/79+wO1D03m5eXx8MMPExYWhq+vL127dmXRokUuNTzwwAO0b9+eNWvW0KNHD0wmE+np6Xz//fcu561du5YBAwYQHByMv78/KSkpvPXWW5d8f4QQ50gQE8KLBg4cSO/evXnttdfc9pxPPvkkbdu2ZeHChQwYMIAnnniCF154gTlz5jBlyhTeffddvvrqK1555ZUaj33iiSeIjY1l4cKFPP7447z77rsutRUUFHDdddexbt06Jk2axKJFi0hKSmLw4MHs2rXL5bm2bt3Ka6+9xssvv8ySJUvo0KFDrfVu3ryZm2++GZ1Ox9y5c/n73//OmjVr6NevH8XFxYDjh32vXr3o0qULa9euZe3atRf9/r/88ktGjRpFYmIiCxcu5PXXX2fevHkMGTKkRqh85ZVXKCsrY86cOUyYMIGZM2fyxBNPOO9/++23+fvf/84f/vAHli9fzkcffUTnzp1dQuxdd93FlClTeOqpp1i8eDF33303zz33HP/+979dXstqtXLnnXdyxx138M033zB69GjuvvtuFi5cSGVlpcu5s2bNYujQoYSEhABw5MgRHn/8cRYuXMinn35KdHQ0ffv2Zffu3QA8/PDDjB8/HqPR6GyfDz74oNb2sdlsDBkyhAULFvDGG2+wcOFCEhISGDlyJF999ZXLubm5uTz66KM8/fTTLFy4kICAAEaMGEFeXh4AxcXFDB06FD8/Pz777DO++uornn/+eZcwK4Sog5c3HRfiqjRhwgTl4+OjlFJq6dKlClBLly5VSin11ltvqfP/a2ZlZSlAzZ492+U5Ljxv5cqVClDPPfec81hxcbHy8fFR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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# convergence graph\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.pyplot import figure\n",
    "import matplotlib\n",
    "\n",
    "LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list, LHS_empirical_list_of_lists, RHS_empirical_list_of_lists = simulate_aspuru_guzik(20,100)\n",
    "\n",
    "y = (np.array(LHS_empirical_list_of_lists) - np.array(RHS_empirical_list_of_lists))\n",
    "\n",
    "figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')\n",
    "plt.xlabel(\"Number of observations\")\n",
    "plt.ylabel(\"$\\widehat{Var}(k=2) - \\widehat{Var}(k=3)$\")\n",
    "#plt.yticks(np.arange(-10.01, 0.01, step=1.0))\n",
    "plt.title(\"Empirical difference in $\\widehat{Var}(k=2)$ vs. $\\widehat{Var}(k=3)$ across random states\")\n",
    "for convergence_seq in y[0:10]:\n",
    "    plt.plot(list(range(1,100)),convergence_seq[1:])\n",
    "plt.savefig(\"empirical_covariance_convergence_graph_randomstates.png\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:17: RuntimeWarning: Degrees of freedom <= 0 for slice\n",
      "/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:18: RuntimeWarning: Degrees of freedom <= 0 for slice\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     80      0\n",
      "True      15      5\n",
      "15\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     89      2\n",
      "True       4      5\n",
      "25\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     89      0\n",
      "True       7      4\n",
      "35\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     90      2\n",
      "True       4      4\n",
      "45\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     87      2\n",
      "True       3      8\n",
      "55\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     88      0\n",
      "True       6      6\n",
      "65\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     86      1\n",
      "True       8      5\n",
      "75\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     93      2\n",
      "True       3      2\n",
      "85\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     92      3\n",
      "True       1      4\n",
      "95\n",
      "col_0  False  True \n",
      "row_0              \n",
      "False     93      1\n",
      "True       1      5\n"
     ]
    }
   ],
   "source": [
    "for i in range(5,105,10):\n",
    "    LHS_empirical_list, RHS_empirical_list, LHS_theoretical_list, RHS_theoretical_list = simulate_aspuru_guzik(100, i)\n",
    "    print(i)\n",
    "    print(pd.crosstab(np.array(LHS_empirical_list) > np.array(RHS_empirical_list),\n",
    "            np.array(LHS_theoretical_list) > np.array(RHS_theoretical_list)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, '# of misjudged splits')"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAdA0lEQVR4nO3dfZQcdZ3v8feHEGTQQMCMSAKY8GCQ6yLB8QFlvVG4xl1ZiBx8wCdAvRH1iHI1apSj7tnjRY0Pq7ioWRaCijwIIYJeDCyCPApMmMAgEHWBYALIoMRFHDEk3/vH79dMz9DTUzOZ6p5MfV7n9OmqX1V3fbuq+tu//lXVrxQRmJlZdWzX7gDMzKy1nPjNzCrGid/MrGKc+M3MKsaJ38ysYrZvdwBFzJgxI2bPnt3uMMzMtimrV69+NCI6h5ZvE4l/9uzZdHd3tzsMM7NtiqR1jcrd1GNmVjFO/GZmFePEb2ZWMU78ZmYV48RvZlYx28RZPWOxsmcDS1et5cGN/cyc3sHiBXNZOG9Wu8MyM2u7SZn4V/ZsYMmKXvo3bQZgw8Z+lqzoBXDyN7PKm5RNPUtXrX066df0b9rM0lVr2xSRmdnEMSkT/4Mb+0dVbmZWJZMy8c+c3jGqcjOzKpmUiX/xgrl0TJ0yqKxj6hQWL5jbpojMzCaOSXlwt3YA12f1mJk906RM/JCSvxO9mdkzTcqmHjMzG54Tv5lZxTjxm5lVjBO/mVnFOPGbmVWME7+ZWcU48ZuZVUxpiV/SWZIekXRng2kfkxSSZpS1fDMza6zMGv9y4A1DCyXtBbweeKDEZZuZ2TBKS/wRcS3wxwaTvg58Aoiylm1mZsNraRu/pKOBDRFxeyuXa2ZmA1rWV4+knYBPk5p5isy/CFgEsPfee5cYmZlZtbSyxr8vMAe4XdL9wJ7AbZKe32jmiFgWEV0R0dXZ2dnCMM3MJreW1fgjohd4Xm08J/+uiHi0VTGYmVm5p3OeB9wEzJW0XtJ7y1qWmZkVV1qNPyKOG2H67LKWbWZmw/OVu2ZmFePEb2ZWMU78ZmYV48RvZlYxTvxmZhXjxG9mVjFO/GZmFePEb2ZWMU78ZmYV48RvZlYxTvxmZhXjxG9mVjFO/GZmFePEb2ZWMU78ZmYV48RvZlYxTvxmZhXjxG9mVjFO/GZmFePEb2ZWMU78ZmYV48RvZlYxpSV+SWdJekTSnXVlSyXdI+kOSZdIml7W8s3MrLEya/zLgTcMKbsSeHFEHAT8GlhS4vLNzKyB0hJ/RFwL/HFI2RUR8VQe/SWwZ1nLNzOzxtrZxv8e4PLhJkpaJKlbUndfX18LwzIzm9zakvglfQZ4Cjh3uHkiYllEdEVEV2dnZ+uCMzOb5EZM/JL2lfSsPDxf0slbc1BW0gnAkcA7IiLG+j5mZjY2RWr8FwObJe0HLAP2An44loVJegPwCeCoiPjLWN7DzMy2TpHEvyUfkH0TcHpELAb2GOlFks4DbgLmSlov6b3At4BpwJWS1kj6zlbEbmZmY7B9gXk2SToOOB74p1w2daQXRcRxDYr/YxSxmZlZCYrU+E8EDgW+EBH3SZoDfL/csMzMrCxFavz/KyJOro3k5P/XEmMyM7MSFanxH9+g7IRxjsPMzFpk2Bp/btd/OzBH0qV1k6Yx5IpcMzPbdjRr6rkReAiYAXy1rvxx4I4ygzIzs/IMm/gjYh2wjnRg18zMJolmTT3XR8Rhkh4H6q+wFRARsXPp0ZmZ2bhrVuM/LD9Pa104ZmZWtmY1/t2avTAifIDXzGwb1Ozg7mpSE48aTAtgn1IiMjOzUjVr6pnTykDMzKw1ily5i6RjgMNINf3rImJlqVGZmVlpivTHfwZwEtAL3AmcJOnfyg7MzMzKUaTG/zrgRbWbpkg6B/hVqVGZmVlpivTV81tg77rxvXKZmZltg4rU+KcBd0u6JY+/DOiu9d8TEUeVFZyZmY2/Ion/s6VHYWZmLVMk8XcD/RGxRdILgQOAyyNiU7mhmZlZGYq08V8L7ChpFnAF8C5geZlBmZlZeYokfkXEX4BjgDMi4s3Ai8sNy8zMylIo8Us6FHgH8NNRvM7MzCagIgn8I8AS4JKI+JWkfYCrR3qRpLMkPSLpzrqy3SRdKek3+XnXsYduZmZjMWLij4hrI+KoiPhSHr+3/ubrTSwH3jCk7FPAVRGxP3BVHjczsxYqrckmIq7lmffmPRo4Jw+fAywsa/lmZtZYq9vqd4+Ih/Lww8Duw80oaZGkbkndfX19rYnOzKwC2naQNvf9E02mL4uIrojo6uzsbGFkZmaTW7M7cJ1O88RcpJ1/qN9L2iMiHpK0B/DIGN7DzMy2QrMafzfpLlw7AocAv8mPg4Edxri8S4Hj8/DxwI/H+D5mZjZGze7AdQ6ApA8Ah0XEU3n8O8B1I72xpPOA+cAMSeuBzwFfBC6U9F5gHfCWrf0AZmY2OkX66tkV2JmBM3Sek8uaiojjhpl0eLHQzMysDEUS/xeBHklXk268/hrg82UGZWZm5Rkx8UfE2ZIuB16Riz4ZEQ+XG5aZmZWlyD13BRwBvCQifgzsIOnlpUdmZmalKHIe/xnAoUCtzf5xwDdbNzPbRhVp439FRBwiqQcgIh6TNNbTOc3MrM2K1Pg3SZpCvphLUiewpdSozMysNEVq/N8ELgGeJ+kLwLHAqaVGZWYts7JnA0tXreXBjf3MnN7B4gVzWThvVrvDshIVOavnXEmrSeffC1gYEXeXHpmZlW5lzwaWrOilf9NmADZs7GfJil4AJ/9JrMhZPbuR+tQ5D/ghqb+dqWUHZmblW7pq7dNJv6Z/02aWrlrbpoisFYq08d8G9AG/JvXV0wfcL+k2SS8tMzgzK9eDG/tHVW6TQ5HEfyXwjxExIyKeC/wD8BPgg6RTPc1sGzVzeseoym1yKJL4XxkRq2ojEXEFcGhE/BJ4VmmRmVnpFi+YS8fUKYPKOqZOYfGCuW2KyFqhyFk9D0n6JHB+Hn8rqZ1/Cj6t02ybVjuA67N6qqVI4n87qUvllXn8hlw2BXerbLbNWzhvlhN9xRQ5nfNR4MPDTP7t+IZjZmZla3brxctofuvFo0qJyMzMStWsxv+V/HwM8HzgB3n8OOD3ZQZlZmblaXbrxV8ASPpqRHTVTbpMUnfpkZmZWSmKnM75bEn71EYkzQGeXV5IZmZWpiJn9ZwCXCPpXlJfPS8A3l9qVGZmVpoiZ/X8TNL+wAG56J6IeLLcsMzMrCwjJn5J7x5S9BJJRMT3SorJzMxKVKSp52V1wzuSume+DRhz4pd0CvA+0umivcCJEfHXsb6fmZkVV6SpZ9DFW5KmM9B9w6hJmgWcDBwYEf2SLgTeBiwf63uamVlxRc7qGeoJYM5WLnd7oEPS9sBOwINb+X5mZlZQkTb++it4twMOBC4c6wIjYoOkrwAPAP3AFbnHz6HLXQQsAth7773HujgzMxuiSBv/V+qGnwLWRcT6sS5Q0q7A0aR/DRuBH0l6Z0T8oH6+iFgGLAPo6uoatusIMzMbnSJt/L8Y52UeAdwXEX0AklYAr2KgSwgzMyvRsG38kq7Pz49L+u+6R238PkkfHMMyHwBeKWknSSKdJeSbt5uZtUizvnoOy8/TGk2X9FzgRkZ5+8WIuFnSRaRTQp8CeshNOmZmVr4iB3f3BdZHxJOS5gMHAd+LiD/k8VGLiM+Rbu5iZmYtVuR0zouBzZL2I9XM9wJ+CBARD5UYm5mZlaBI4t8SEU8BbwJOj4jFwB7lhmVmZmUpkvg3SToOOB74SS6bWl5IZmZWpiKJ/0TgUOALEXFf7o//++WGZWZmZSlyHv9dpL51auP3AV8qMygzMytPs5utXxgRb5HUy+CbrguIiDio9OjMzGzcNavxfyQ/H9mKQKxcK3s2sHTVWh7c2M/M6R0sXjCXhfNmtTssM2uDZhdwPZSf1wFI2rnZ/DZxrezZwJIVvfRv2gzAho39LFnRC+Dkb1ZBIx7clfR+SQ8DdwCr86O77MBs/CxdtfbppF/Tv2kzS1etbVNEZtZORWrwHwdeHBGPlh2MlePBjf2jKjezya3I6Zz/Bfyl7ECsPDOnd4yq3MwmtyI1/iXAjZJuBp6sFUbEycO/xCaSxQvmDmrjB+iYOoXFC+a2MSoza5ciif+7wM9JN0XfUm44VobaAVyf1WNmUCzxT42I/1N6JFaqhfNmOdGbGVCsjf9ySYsk7SFpt9qj9MjMzKwURWr8x+XnJXVlAewz/uGYmVnZivTVM6cVgZiZWWsUaeoxM7NJxInfzKxihk38kl6dn5/VunDMzKxszWr838zPN7UiEDMza41mB3c3SVoGzJL0zaETt+bKXUnTgTOBF5POEHpPREzKHxh3hzyY18cArwtrl2aJ/0jgCGABqUfO8fQN4GcRcaykHYCdxvn9JwR3hzyY18cArwtrp2b98T8KnC/p7oi4fbwWKGkX4DXACXk5fwP+Nl7vP5E06w65il9ur48BXhfWTkXO6vmDpEskPZIfF0vacyuWOQfoA86W1CPpTEnPHjpTvlq4W1J3X1/fViyufdwd8mBeHwO8LqydiiT+s4FLgZn5cVkuG6vtgUOAb0fEPOAJ4FNDZ4qIZRHRFRFdnZ2dW7G49nF3yIN5fQzwurB2KpL4nxcRZ0fEU/mxHNiaTLweWB8RN+fxi0g/BJPO4gVz6Zg6ZVBZlbtD9voY4HVh7VSkr55HJb0TOC+PHwf8YawLjIiHJf1O0tyIWAscDtw11vebyNwd8mBeHwO8LqydFBHNZ5BeAJwOHEo69fJG4OSIeGDMC5UOJp3OuQNwL3BiRDw23PxdXV3R3e3b/JqZjYak1RHRNbS8SCdt64CjxjOYiFgDPCMYMzMrn/vqMTOrGCd+M7OKceI3M6uYERO/pFPrht1Tp5nZNq5Zt8yflHQocGxd8aTsSM3MrEqandVzD/BmYB9J1+Xx59adf29mZtugZol/I/BpYH5+vAh4PfCpnPxfVXp0ZiVwd8gTk7dL6zRL/AuAzwL7Al8D7gCeiIgTWxGYWRncHfLE5O3SWsO28UfEpyPicOB+4PvAFKBT0vWSLmtRfGbjqll3yNY+3i6tVaSvnlUR0Q10S/pARBwmaUbZgZmVwd0hT0zeLq014umcEfGJutETctmjZQVkViZ3hzwxebu01qgu4BrPO3GZtYO7Q56YvF1aq0hTj9mk4e6QJyZvl9YasVvmicDdMpuZjd5w3TK7rx4zs4px4jczqxgnfjOzinHiNzOrGCd+M7OKceI3M6sYJ34zs4pp2wVckqYA3cCGiDiyXXGYmdWrQvfQ7bxy9yPA3cDObYzBzOxpVekeui1NPZL2BN4InNmO5ZuZNVKV7qHb1cb/r8AngC3DzSBpkaRuSd19fX2ti8zMKqsq3UO3PPFLOhJ4JCJWN5svIpZFRFdEdHV2drYoOjOrsqp0D92OGv+rgaMk3Q+cD7xO0g/aEIeZ2SBV6R665Yk/IpZExJ4RMRt4G/DziHhnq+MwMxtq4bxZnHbM3zFregcCZk3v4LRj/m5SHdgF98dvZjbIwnmzJl2iH6qtiT8irgGuaWcMZmZV4yt3zcwqxonfzKxinPjNzCrGid/MrGKc+M3MKsaJ38ysYpz4zcwqxonfzKxinPjNzCrGid/MrGKc+M3MKsaJ38ysYpz4zcwqxonfzKxinPjNzCrGid/MrGKc+M3MKsaJ38ysYpz4zcwqxonfzKxinPjNzCrGid/MrGK2b/UCJe0FfA/YHQhgWUR8o9VxmJlNZCt7NrB01Voe3NjPzOkdLF4wl4XzZo3Le7c88QNPAR+LiNskTQNWS7oyIu5qQyxmZhPOyp4NLFnRS/+mzQBs2NjPkhW9AOOS/Fve1BMRD0XEbXn4ceBuYHx+xszMJoGlq9Y+nfRr+jdtZumqtePy/m1t45c0G5gH3Nxg2iJJ3ZK6+/r6Wh2amVnbPLixf1Tlo9W2xC/pOcDFwEcj4r+HTo+IZRHRFRFdnZ2drQ/QzKxNZk7vGFX5aLUl8UuaSkr650bEinbEYGY2US1eMJeOqVMGlXVMncLiBXPH5f3bcVaPgP8A7o6Ir7V6+WZmE13tAO5kOqvn1cC7gF5Ja3LZpyPi/7UhFjOzCWnhvFnjluiHannij4jrAbV6uWZmlvjKXTOzinHiNzOrGCd+M7OKceI3M6sYRUS7YxiRpD5gXbvjmABmAI+2O4gJxOtjgNfFYF4fyQsi4hlXwG4Tid8SSd0R0dXuOCYKr48BXheDeX0056YeM7OKceI3M6sYJ/5ty7J2BzDBeH0M8LoYzOujCbfxm5lVjGv8ZmYV48RvZlYxTvwTkKS9JF0t6S5Jv5L0kVy+m6QrJf0mP+/a7lhbSdIUST2SfpLH50i6WdJvJV0gaYd2x9gqkqZLukjSPZLulnRoVfcPSafk78mdks6TtGOV940inPgnptoN6Q8EXgl8SNKBwKeAqyJif+CqPF4lHyHdo7nmS8DXI2I/4DHgvW2Jqj2+AfwsIg4AXkJaL5XbPyTNAk4GuiLixcAU4G1Ue98YkRP/BNTkhvRHA+fk2c4BFrYnwtaTtCfwRuDMPC7gdcBFeZbKrA9JuwCvId3QiIj4W0RspLr7x/ZAh6TtgZ2Ah6jovlGUE/8EN+SG9LtHxEN50sPA7m0Kqx3+FfgEsCWPPxfYGBFP5fH1pB/HKpgD9AFn56avMyU9mwruHxGxAfgK8AAp4f8JWE11941CnPgnsGY3pI90Hm4lzsWVdCTwSESsbncsE8T2wCHAtyNiHvAEQ5p1qrJ/5OMYR5N+DGcCzwbe0NagtgFO/BPUMDek/72kPfL0PYBH2hVfi70aOErS/cD5pL/x3wCm57/3AHsCG9oTXsutB9ZHxM15/CLSD0EV948jgPsioi8iNgErSPtLVfeNQpz4J6AmN6S/FDg+Dx8P/LjVsbVDRCyJiD0jYjbpwN3PI+IdwNXAsXm2Kq2Ph4HfSZqbiw4H7qKa+8cDwCsl7ZS/N7V1Ucl9oyhfuTsBSToMuA7oZaBN+9Okdv4Lgb1J3VS/JSL+2JYg20TSfODjEXGkpH1I/wB2A3qAd0bEk+2Mr1UkHUw60L0DcC9wIqkiV7n9Q9I/A28lnQ3XA7yP1KZfyX2jCCd+M7OKcVOPmVnFOPGbmVWME7+ZWcU48ZuZVYwTv5lZxTjxj5Kk0yS9VtJCSUtG+drO3GNgj6S/L/ia+yXNGFu04yP3BPnBuvGZki5q9pqtXN7C3CldbfwaSYVvnC1ptqS3lxPd6EyE7TecsrfjCMu+cRTztmwdSvq8pI+PYv5B32lJb869pV5dZpxby4l/9F4B/BL4n8C1o3zt4UBvRMyLiOvGPbIC6q5mHI3pwNOJPyIejIhjm8y/tRYCB4441/BmAxMi8U9UkrZvwXYcVkS8qh3LLcHQ7/R7gf8dEa9tc1zNRYQfBR7AUuAO4HFgTX6+A/hsg3lnAz/P068iXVBzMOkqw778+o4hrzmcdKFJL3AW8Kxcfj/w5Vx+C7BfLn8zcCdwO3BtLpuS47w1L/v9uXw+6YKwS4FfA18EPlS37M8DHweek+O9LS/v6Dz9fKA/x700f74787QdgbPz/D3Aa3P5CaTL538G/Ab4cl2My3PsvcApQ9bDq4A/Avfl5e0LXEPqZveWHP/f163n63K8twGvyuW/JHXWtabB++9B+sFek2Oovde3gW7gV8A/181/P3Banr+b1DXCKuC/gJPq1u+1wE+BtcB3gO3qXj8jD78zf4Y1wHeBKQ32nZcBN+btegswrck6/iXwP+peew3QBbwcuCnPeyMwt26bXEraN38xZDsOty7n5/e9CLgHOJeB638axdpwH2zwOf/cbHsMmfd+Gn8H/ol0UWMP8J+kTuogVcrW5EcPMC2XL66Lq34bf4a0X10PnEe6QHAs3+nPAX/O+8DSduespvms3QFsS4+8o58OTAVuaDLfZcDxefg9wMo8fALwrQbz7wj8DnhhHv8eqWO22k7/mTz8buAnebgXmJWHp+fnRcCpefhZpEQ1J395nwDm5GnzgF/ULf8uYC9S518757IZwG8BUZcg8rSnx4GPAWfl4QPyF2HH/FnvBXbJ4+vyMl4KXFn3XtMbrI/lwLF149cAX83D/wj8Zx7eCdgxD+8PdOfh+bX11OC9P1a3PqcwkBR2qyu7Bjiobv1/IA9/nfTFnwZ0Ar+vW95fgX3y66+sxZ9fPwN4EWm/mJrLzwDePSS22lW4L8vjO+dtMtw6PoWcwEgJdG396/LwEcDFdfvf+rrPWr8dm63LP5H6u9mO9INyWJNYG+6DDbbDn5ttjyHz3k/j78CuDPwIvY+BfeQy4NV5+Dk5rteTbsCu/Dl+Qura+qWk79JO+TP8lsaJv9B3mvzj2+5cNdJjLH/7q+wQUu3mAAbfEGSoQ4Fj8vD3SbWVZuaSOpr6dR4/B/gQqStiSLWQ2vPX8/ANwHJJF5Jq1pB27oMk1f6+70L6Ev8NuCUi7gOIiB5Jz5M0k5TAHouI3+WO4f6vpNeQuoqYxchd+x5G+jEkIu6RtA54YZ52VUT8CUDSXcALSDXqfSSdTqohXzHC+9fUPuNqUsKC9AP8rdx9wea65TZzK3BW/qwrI2JNLn+LpEWkJLEHqanpjjzt0vzcCzwn0j0SHpf0pKTpedotEXFv/qznkdZLffv54aQkc2vqUoYOntmJ2lzgoYi4FSByj6y5C49G6/hC0vr7HPCWuuXtApwjaX9SD51T65ZxZTTuxqHZurwlItbnWNaQ1v+fhol1uH3wvgbLhOG3x1CNvgN7AhfkDul2qFvGDcDXJJ0LrIiI9Tmu15P+AUD6Qdif9CN+SUT8Jcdf29ZDjfY7PaE58ReQvwzLSTvao6TagfKX4NCI6C85hBg6HBEnSXoF6eYkqyW9lFSb+XBErBoS/3xSjb/ej0idWD0fuCCXvYP0Q/DSiNiUe8PccSviru8bZTOpFvqYpJcAC4CTSAnrPaN4r80M7LenAL8n3YFqO1Ktu6mIuDb/sL2R9MP5NVITx8dJtdfHJC1n8OeuLXvLkM+0pS6WoX2fDB0XcE5EjOqEgGYiYoOkP0g6iNRXzUl50r8AV0fEm/L9HK6pe9nQ/aCm2bp8xnZsElbDfbDJZ3jG9oiI7zWatcHw6cDXIuLSvI9/Pr/nFyX9lPTv8AZJC3Jcp0XEdwcFK320SJyTjQ/uFhARayLiYFI74IGktr4FEXHwMEn/RlIvkpCS6UgHctcCsyXtl8ffRWqDrXlr3fNNAJL2jYibI+KzpDbGvUhtzx/ItSckvTDfoKORC3KMx5J+BCDVzh7JSf+1pBo6pOMZ04Z5n+vyZ0TSC0ltn2uH+6D57IztIuJi4FTSv6ihmi2v3i6kWucW0jqbMtLrJb2A1ETz76ROzg4h/cV/AviTpN2Bfyiw7KFernSf1+1I2+n6IdOvAo6V9Lwcx245lnprgT0kvSzPMy0fjG+2ji8g3aBml4io/UPZhYFuiE8oGP9w63I4w8U6mn1wuO3RyDO+Awz+nLVeSWvfjd6I+BLpH8UBOa73KN3jAkmz8ra4FlgoqUPSNNJxg0ZG+52e0FzjL0hSrUlki6QDIuKuJrN/mHR3pMWkpHxis/eOiL9KOhH4Uf7y3Eo6QFizq6Q7SDWv43LZ0vxXXqSkcjupaWI2cJtSe0Ifw9xyLiJ+lXf0DTFw16Zzgcsk9ZLaZu/J8/5B0g2S7gQuB/6t7q3OAL6dX/MUcEJEPJmbMxqZlddNrdLRqAZ8PvDvkk5moGvdRs4ALpb0btJB5Fpt9g5gs6TbgeUR8fW618wHFkvaRDoQ9+6IuE9ST/68vyM1FYzWrcC3gP1IXQJfUj8xIu6SdCpwRf7sm0jNeevq5vmbpLcCp0vqIB1QP4Jh1nF+2UWkexP8S93ivkxq6jmV1JxWxHDrsqEmsZ5JwX0wm8+Q7THMfI2+A58nfWceI1XG5uTyj+aKyxZS0+LleZ98EXBT3jf/TOqx8zZJF5C+P4+QtmMjo/pOT3TundNsK6muq+h2x2JWhJt6zMwqxjV+M7OKcY3fzKxinPjNzCrGid/MrGKc+M3MKsaJ38ysYv4/0uc0xmNV9l0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(range(5,105,10), [15,6,7,6,5,6,9,5,4,2])\n",
    "plt.xlabel(\"# of observations that sample covariance is based off\")\n",
    "plt.ylabel(\"# of misjudged splits\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
